+/**\r
+ * Copyright (C) 2007 EDIT\r
+ * European Distributed Institute of Taxonomy \r
+ * http://www.e-taxonomy.eu\r
+ * \r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+\r
package eu.etaxonomy.cdm.io.sdd;\r
\r
import java.io.File;\r
import java.text.SimpleDateFormat;\r
import java.util.ArrayList;\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.jdom.Element;\r
import org.jdom.Namespace;\r
import org.joda.time.DateTime;\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
import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
import eu.etaxonomy.cdm.model.common.VersionableEntity;\r
import eu.etaxonomy.cdm.model.description.CategoricalData;\r
import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.FeatureNode;\r
+import eu.etaxonomy.cdm.model.description.FeatureTree;\r
import eu.etaxonomy.cdm.model.description.MeasurementUnit;\r
import eu.etaxonomy.cdm.model.description.QuantitativeData;\r
import eu.etaxonomy.cdm.model.description.State;\r
import eu.etaxonomy.cdm.model.media.ImageFile;\r
import eu.etaxonomy.cdm.model.media.Media;\r
import eu.etaxonomy.cdm.model.media.MediaRepresentation;\r
+import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;\r
import eu.etaxonomy.cdm.model.media.Rights;\r
import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.reference.Article;\r
import eu.etaxonomy.cdm.model.reference.Database;\r
import eu.etaxonomy.cdm.model.reference.Generic;\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
\r
-\r
-public class SDDDescriptionIO extends SDDIoBase implements ICdmIO {\r
+/**\r
+ * @author h.fradin\r
+ * @created 24.10.2008\r
+ * @version 1.0\r
+ */\r
+@Component("sddDescriptionIO")\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
\r
+ private Map<String,Person> authors = new HashMap<String,Person>();\r
+ private Map<String,String> citations = new HashMap<String,String>();\r
+ private Map<String,String> defaultUnitPrefixes = new HashMap<String,String>();\r
+ private Map<String,Person> editors = new HashMap<String,Person>();\r
+ private Map<String,FeatureNode> featureNodes = new HashMap<String,FeatureNode>();\r
+ private Map<String,Feature> features = new HashMap<String,Feature>();\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,FeatureNode> nodes = new HashMap<String,FeatureNode>();\r
+ private Map<String,ReferenceBase> publications = new HashMap<String,ReferenceBase>();\r
+ private Map<String,StateData> stateDatas = new HashMap<String,StateData>();\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
+ private Language datasetLanguage = 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
+ private Set<StatisticalMeasure> statisticalMeasures = new HashSet<StatisticalMeasure>();\r
+ private Set<VersionableEntity> featureData = new HashSet<VersionableEntity>();\r
+ private Set<FeatureTree> featureTrees = new HashSet<FeatureTree>();\r
+\r
+ private Rights copyright = null;\r
\r
public SDDDescriptionIO(){\r
super();\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
- String value;\r
- logger.info("start Datasets ...");\r
- SDDImportConfigurator sddConfig = (SDDImportConfigurator)config;\r
+ TransactionStatus ts = startTransaction();\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
Element root = sddConfig.getSourceRoot();\r
- boolean success =true;\r
-\r
+ boolean success = true;\r
Namespace sddNamespace = sddConfig.getSddNamespace();\r
- Namespace xmlNamespace = Namespace.getNamespace("xml","http://www.w3.org/XML/1998/namespace");\r
\r
logger.info("start TechnicalMetadata ...");\r
// <TechnicalMetadata created="2006-04-20T10:00:00">\r
- Element elTechnicalMetadata = root.getChild("TechnicalMetadata", sddNamespace);\r
- String nameCreated = elTechnicalMetadata.getAttributeValue("created");\r
- ReferenceBase sourceReference = config.getSourceReference();\r
- ReferenceBase sec = Database.NewInstance();\r
- if (nameCreated != null) {\r
- if (!nameCreated.equals("")) {\r
- int year = Integer.parseInt(nameCreated.substring(0,4));\r
- int monthOfYear = Integer.parseInt(nameCreated.substring(5,7));\r
- int dayOfMonth = Integer.parseInt(nameCreated.substring(8,10));\r
- int hourOfDay = Integer.parseInt(nameCreated.substring(11,13));\r
- int minuteOfHour = Integer.parseInt(nameCreated.substring(14,16));\r
- int secondOfMinute = Integer.parseInt(nameCreated.substring(17,19));\r
- DateTime created = new DateTime(year,monthOfYear,dayOfMonth,hourOfDay,minuteOfHour,secondOfMinute,0);\r
- sourceReference.setCreated(created);\r
- sec.setCreated(created);\r
- }\r
- }\r
-\r
- // <Generator name="n/a, handcrafted instance document" version="n/a"/>\r
- Element elGenerator = elTechnicalMetadata.getChild("Generator", sddNamespace);\r
- String generatorName = elGenerator.getAttributeValue("name");\r
- String generatorVersion = elGenerator.getAttributeValue("version");\r
-\r
+ importTechnicalMetadata(root, sddNamespace, sddConfig);\r
List<Element> elDatasets = root.getChildren("Dataset",sddNamespace);\r
-\r
- Map<String,TaxonDescription> taxonDescriptions = new HashMap<String,TaxonDescription>();\r
- Map<String,StateData> stateDatas = new HashMap<String,StateData>();\r
- Map<String,MeasurementUnit> units = new HashMap<String,MeasurementUnit>();\r
- Map<String,String> defaultUnitPrefixes = new HashMap<String,String>();\r
- Map<String,Feature> features = new HashMap<String,Feature>();\r
- Map<String,ReferenceBase> publications = new HashMap<String,ReferenceBase>();\r
-\r
- Set<StatisticalMeasure> statisticalMeasures = new HashSet<StatisticalMeasure>();\r
- Set<VersionableEntity> featureData = new HashSet<VersionableEntity>();\r
-\r
- TransactionStatus ts = config.getCdmAppController().startTransaction();\r
-\r
int i = 0;\r
+\r
//for each Dataset\r
logger.info("start Dataset ...");\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
+ }\r
+ commitTransaction(ts);\r
+ return success;\r
+ }\r
\r
- // <Dataset xml:lang="en-us">\r
- String nameLang = elDataset.getAttributeValue("lang",xmlNamespace);\r
- Language datasetLanguage = null;\r
- if (!nameLang.equals("")) {\r
- String iso = nameLang.substring(0, 2);\r
- datasetLanguage = config.getCdmAppController().getTermService().getLanguageByIso(iso);\r
- //datasetLanguage = Language.ENGLISH();\r
- } else {\r
- datasetLanguage = Language.ENGLISH();\r
- }\r
- if (datasetLanguage == null) {\r
- datasetLanguage = Language.ENGLISH();\r
- }\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+ */\r
+ protected boolean isIgnore(SDDImportState state){\r
+ return false;\r
+ }\r
\r
- /* <Representation>\r
- <Label>The Genus Viola</Label>\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
- logger.info("start Representation ...");\r
- Element elRepresentation = elDataset.getChild("Representation",sddNamespace);\r
- String label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
- String detail = (String)ImportHelper.getXmlInputValue(elRepresentation, "Detail",sddNamespace);\r
\r
- sourceReference.setTitleCache(generatorName + " - " + generatorVersion + " - " + label);\r
- sec.setTitleCache(generatorName + " - " + generatorVersion + " - " + label);\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
+ List<CdmBase> lcb = new ArrayList<CdmBase>();\r
+ lcb.add(cb);\r
+ mediaObject_ListCdmBase.put(refMO,lcb);\r
+ } else {\r
+ List<CdmBase> lcb = mediaObject_ListCdmBase.get(refMO);\r
+ lcb.add(cb);\r
+ mediaObject_ListCdmBase.put(refMO,lcb);\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
+ // imports information about the Dataset\r
+ protected void importDatasetRepresentation(Element parent, Namespace sddNamespace){\r
+ logger.info("start Representation ...");\r
+ /* <Representation>\r
+ <Label>The Genus Viola</Label>\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
+ 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
+ sec.setTitleCache(label);\r
+\r
+ if (detail != null) {\r
Annotation annotation = Annotation.NewInstance(detail, datasetLanguage);\r
+ sec.addAnnotation(annotation);\r
+ }\r
\r
- List<Element> listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
+ List<Element> listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
\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
- if (ref != null) {\r
- if (!ref.equals("")) {\r
- this.addCdmBaseWithImage(ref, sourceReference);\r
- this.addCdmBaseWithImage(ref,sec);\r
- mediaObject_Role.put(ref,role);\r
- }\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
+ if (ref != null) {\r
+ if (!ref.equals("")) {\r
+ this.associateImageWithCdmBase(ref,sourceReference);\r
+ this.associateImageWithCdmBase(ref,sec);\r
+ mediaObject_Role.put(ref,role);\r
}\r
}\r
+ }\r
+ }\r
\r
- // <RevisionData>\r
- logger.info("start RevisionData ...");\r
- Element elRevisionData = elDataset.getChild("RevisionData",sddNamespace);\r
-\r
- // <Creators>\r
- Element elCreators = elRevisionData.getChild("Creators",sddNamespace);\r
-\r
- // <Agent role="aut" ref="a1"/>\r
- List<Element> listAgents = elCreators.getChildren("Agent", sddNamespace);\r
+ // 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
+ 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
+ }\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
- int j = 0;\r
- //for each Agent\r
- Map<String,Person> authors = new HashMap<String,Person>();\r
- Map<String,Person> editors = new HashMap<String,Person>();\r
- for (Element elAgent : listAgents){\r
+ for (Element elDetail : listDetails){\r
+ String lang = elDetail.getAttributeValue("lang",xmlNamespace);\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
- String role = elAgent.getAttributeValue("role");\r
- String ref = elAgent.getAttributeValue("ref");\r
- if (role.equals("aut")) {\r
- if(!ref.equals("")) {\r
- authors.put(ref, null);\r
- }\r
+ 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
- if (role.equals("edt")) {\r
- if(!ref.equals("")) {\r
- editors.put(ref, null);\r
+ } else {\r
+ labDet = langLabDet.get(langLabDet.keySet().iterator().next());\r
+ }\r
+ \r
+ ie.setTitleCache(labDet.get(0));\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
\r
- if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);}\r
+ ve = ie;\r
\r
- }\r
+ } else if (ve instanceof TermBase) {\r
+ TermBase tb = (TermBase) ve;\r
\r
- // <DateModified>2006-04-08T00:00:00</DateModified>\r
- String stringDateModified = (String)ImportHelper.getXmlInputValue(elRevisionData, "DateModified",sddNamespace);\r
-\r
- if (stringDateModified != null) {\r
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");\r
- Date d = null;\r
- try {\r
- d = sdf.parse(stringDateModified);\r
- } catch(Exception e) {\r
- System.err.println("Exception :");\r
- e.printStackTrace();\r
+ for (Iterator<Language> l = langLabDet.keySet().iterator() ; l.hasNext() ;){\r
+ Language lang = l.next();\r
+ List<String> labDet = langLabDet.get(lang);\r
+ if (labDet.size()>0){\r
+ if (labDet.size()>1) {\r
+ tb.addRepresentation(Representation.NewInstance(labDet.get(1), labDet.get(0), labDet.get(0), lang));\r
+ } else {\r
+ tb.addRepresentation(Representation.NewInstance(labDet.get(0), labDet.get(0), labDet.get(0), lang));\r
+ }\r
}\r
+ ve = tb;\r
+ }\r
+\r
+ } else if (ve instanceof Media) {\r
+ Media m = (Media) ve;\r
\r
- GregorianCalendar updated = null;\r
- if (d != null) {\r
- updated = new java.util.GregorianCalendar();\r
- updated.setTime(d);\r
- sourceReference.setUpdated(updated);\r
- sec.setUpdated(updated);\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
- // <IPRStatements>\r
- logger.info("start IPRStatements ...");\r
- Element elIPRStatements = elDataset.getChild("IPRStatements",sddNamespace);\r
- // <IPRStatement role="Copyright">\r
- Rights copyright = null;\r
- if (elIPRStatements != null) {\r
- List<Element> listIPRStatements = elIPRStatements.getChildren("IPRStatement", sddNamespace);\r
- j = 0;\r
- //for each IPRStatement\r
-\r
- for (Element elIPRStatement : listIPRStatements){\r
-\r
- String role = elIPRStatement.getAttributeValue("role");\r
- // <Label xml:lang="en-au">(c) 2003-2006 Centre for Occasional Botany.</Label>\r
- Element elLabel = elIPRStatement.getChild("Label",sddNamespace);\r
- String lang = "";\r
- if (elLabel != null) {\r
- lang = elLabel.getAttributeValue("lang",xmlNamespace);\r
- }\r
- label = (String)ImportHelper.getXmlInputValue(elIPRStatement, "Label",sddNamespace);\r
-\r
- if (role.equals("Copyright")) {\r
- Language iprLanguage = null;\r
- if (lang != null) {\r
- if (!lang.equals("")) {\r
- iprLanguage = config.getCdmAppController().getTermService().getLanguageByIso(lang.substring(0, 2));\r
- //iprLanguage = datasetLanguage;\r
+ }\r
+\r
+ List <Element> listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
+\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
+ 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
- iprLanguage = datasetLanguage;\r
+ ReferenceBase descriptionSource = Generic.NewInstance();\r
+ td.addDescriptionSource(descriptionSource);\r
+ this.associateImageWithCdmBase(ref,descriptionSource);\r
}\r
+ } else {\r
+ this.associateImageWithCdmBase(ref,ve);\r
}\r
- if (iprLanguage == null) {\r
- iprLanguage = datasetLanguage;\r
- }\r
- copyright = Rights.NewInstance(label, iprLanguage);\r
}\r
\r
- if (copyright != null) {\r
- sourceReference.addRights(copyright);\r
- sec.addRights(copyright);\r
- }\r
+ }\r
+ }\r
+ }\r
\r
- if ((++j % modCount) == 0){ logger.info("IPRStatements handled: " + j);}\r
+ }\r
\r
- }\r
+ // imports the representation (label, detail, lang) of a particular SDD element\r
+ protected void importTechnicalMetadata(Element root, Namespace sddNamespace, SDDImportConfigurator sddConfig){\r
+ Element elTechnicalMetadata = root.getChild("TechnicalMetadata", sddNamespace);\r
+ String nameCreated = elTechnicalMetadata.getAttributeValue("created");\r
+ sourceReference = sddConfig.getSourceReference();\r
+\r
+ if (nameCreated != null) {\r
+ if (!nameCreated.equals("")) {\r
+ int year = Integer.parseInt(nameCreated.substring(0,4));\r
+ int monthOfYear = Integer.parseInt(nameCreated.substring(5,7));\r
+ int dayOfMonth = Integer.parseInt(nameCreated.substring(8,10));\r
+ int hourOfDay = Integer.parseInt(nameCreated.substring(11,13));\r
+ int minuteOfHour = Integer.parseInt(nameCreated.substring(14,16));\r
+ int secondOfMinute = Integer.parseInt(nameCreated.substring(17,19));\r
+ DateTime created = new DateTime(year,monthOfYear,dayOfMonth,hourOfDay,minuteOfHour,secondOfMinute,0);\r
+ sourceReference.setCreated(created);\r
+ sec.setCreated(created);\r
}\r
+ }\r
\r
- // <TaxonNames>\r
- logger.info("start TaxonNames ...");\r
- Element elTaxonNames = elDataset.getChild("TaxonNames",sddNamespace);\r
- // <TaxonName id="t1" uri="urn:lsid:authority:namespace:my-own-id">\r
- Map<String,NonViralName> taxonNameBases = new HashMap<String,NonViralName>();\r
- if (elTaxonNames != null) {\r
- List<Element> listTaxonNames = elTaxonNames.getChildren("TaxonName", sddNamespace);\r
- j = 0;\r
- //for each TaxonName\r
- for (Element elTaxonName : listTaxonNames){\r
-\r
- String id = elTaxonName.getAttributeValue("id");\r
- String uri = elTaxonName.getAttributeValue("uri");\r
- // <Representation>\r
- elRepresentation = elTaxonName.getChild("Representation",sddNamespace);\r
- // <Label xml:lang="la">Viola hederacea Labill.</Label>\r
- Element elLabel = elRepresentation.getChild("Label",sddNamespace);\r
- String lang = elLabel.getAttributeValue("lang",xmlNamespace);\r
- label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
- NonViralName tnb = NonViralName.NewInstance(null);\r
- if ((lang != null) && (!lang.equals("la"))) {\r
- logger.info("TaxonName " + j + " is not specified as a latin name.");\r
- }\r
- tnb.setTitleCache(label);\r
- OriginalSource source = OriginalSource.NewInstance(id, "TaxonName");\r
- tnb.addSource(source);\r
- if (!id.equals("")) {\r
- taxonNameBases.put(id,tnb);\r
- }\r
+ // <Generator name="n/a, handcrafted instance document" version="n/a"/>\r
+ Element elGenerator = elTechnicalMetadata.getChild("Generator", sddNamespace);\r
+ generatorName = elGenerator.getAttributeValue("name");\r
+ generatorVersion = elGenerator.getAttributeValue("version");\r
\r
- listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
+ sec.addAnnotation(Annotation.NewDefaultLanguageInstance(generatorName + " - " + generatorVersion));\r
+ sourceReference.addAnnotation(Annotation.NewDefaultLanguageInstance(generatorName + " - " + generatorVersion));\r
\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
- if (ref != null) {\r
- if (!ref.equals("")) {\r
- this.addCdmBaseWithImage(ref,tnb);\r
- }\r
- }\r
- }\r
+ }\r
\r
- if ((++j % modCount) == 0){ logger.info("TaxonNames handled: " + j);}\r
+ // imports the complete dataset information\r
+ protected void importDataset(Element elDataset, Namespace sddNamespace, boolean success, SDDImportConfigurator sddConfig){ // <Dataset xml:lang="en-us">\r
+\r
+ importDatasetLanguage(elDataset,sddConfig);\r
+ importDatasetRepresentation(elDataset, sddNamespace);\r
+ importRevisionData(elDataset, sddNamespace);\r
+ importIPRStatements(elDataset, sddNamespace, sddConfig);\r
+ importTaxonNames(elDataset, sddNamespace, sddConfig);\r
+ importDescriptiveConcepts(elDataset, sddNamespace, sddConfig);\r
+ importCharacters(elDataset, sddNamespace, sddConfig, success);\r
+ importCharacterTrees(elDataset, sddNamespace, sddConfig, success);\r
+ importCodedDescriptions(elDataset, sddNamespace, sddConfig, success);\r
+ importAgents(elDataset, sddNamespace, sddConfig, success);\r
+ importPublications(elDataset, sddNamespace, sddConfig, success);\r
+ importMediaObjects(elDataset, sddNamespace, sddConfig, success);\r
+\r
+ if (authors != null) {\r
+ Team team = Team.NewInstance();\r
+ for (Iterator<Person> author = authors.values().iterator() ; author.hasNext() ;){\r
+ team.addTeamMember(author.next());\r
+ }\r
+ sec.setAuthorTeam(team);\r
+ sourceReference.setAuthorTeam(team);\r
+ }\r
\r
- }\r
+ if (editors != null) {\r
+ Person ed = Person.NewInstance();\r
+ for (Iterator<Person> editor = editors.values().iterator() ; editor.hasNext() ;){\r
+ ed = editor.next();\r
}\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
- // <Characters>\r
- logger.info("start Characters ...");\r
- Element elCharacters = elDataset.getChild("Characters", sddNamespace);\r
+ if (copyright != null) {\r
+ sourceReference.addRights(copyright);\r
+ sec.addRights(copyright);\r
+ }\r
\r
- // <CategoricalCharacter id="c1">\r
- if (elCharacters != null) {\r
- List<Element> elCategoricalCharacters = elCharacters.getChildren("CategoricalCharacter", sddNamespace);\r
- j = 0;\r
- //for each CategoricalCharacter\r
- for (Element elCategoricalCharacter : elCategoricalCharacters){\r
+ for (Iterator<String> refCD = taxonDescriptions.keySet().iterator() ; refCD.hasNext() ;){\r
+ String ref = refCD.next();\r
+ TaxonDescription td = taxonDescriptions.get(ref);\r
+ td.addDescriptionSource(sec);\r
+ if (citations.containsKey(ref)) {\r
+ Article publication = (Article) 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
+ publication.addAnnotation(location);\r
+ }\r
+ td.addDescriptionSource(publication);\r
+ }\r
+ }\r
+ logger.info("end makeTaxonDescriptions ...");\r
\r
- try {\r
+ sddConfig.setSourceReference(sourceReference);\r
\r
- String idCC = elCategoricalCharacter.getAttributeValue("id");\r
+ //saving of all imported data into the CDM db\r
+ ITermService termService = getTermService();\r
+ for (Iterator<StateData> k = stateDatas.values().iterator() ; k.hasNext() ;){\r
+ StateData sd = k.next();\r
+ termService.saveTerm(sd.getState()); \r
+ }\r
+ for (Iterator<Feature> k = features.values().iterator() ; k.hasNext() ;){\r
+ Feature feature = k.next();\r
+ termService.saveTerm(feature); \r
+ }\r
+ if (units != null) {\r
+ for (Iterator<MeasurementUnit> k = units.values().iterator() ; k.hasNext() ;){\r
+ MeasurementUnit unit = k.next();\r
+ if (unit != null) {\r
+ termService.saveTerm(unit); \r
+ }\r
+ }\r
+ }\r
+ for (Iterator<StatisticalMeasure> k = statisticalMeasures.iterator() ; k.hasNext() ;) {\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
- // <Representation>\r
- // <Label> Leaf complexity</Label>\r
- // </Representation>\r
- elRepresentation = elCategoricalCharacter.getChild("Representation",sddNamespace);\r
- label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
+ IReferenceService referenceService = getReferenceService();\r
+ // referenceService.saveReference(sourceReference); \r
+ for (Iterator<ReferenceBase> k = publications.values().iterator() ; k.hasNext() ;){\r
+ Article publication = (Article) k.next();\r
+ referenceService.saveReference(publication); \r
+ }\r
\r
- Feature categoricalCharacter = null;\r
- if (label != null){\r
- categoricalCharacter = Feature.NewInstance(label, label, label);\r
- }\r
- categoricalCharacter.setSupportsQuantitativeData(false);\r
- categoricalCharacter.setSupportsTextData(true);\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
+ for (Iterator<TaxonDescription> k = taxonDescriptions.values().iterator() ; k.hasNext() ;){\r
+ TaxonDescription taxonDescription = k.next();\r
+ // Persists a Description\r
+ descriptionService.saveDescription(taxonDescription); \r
+ }\r
\r
- listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
+// descriptionService.saveFeatureNodeAll(featureNodes.values());\r
+ \r
+ for (Iterator<FeatureTree> k = featureTrees.iterator() ; k.hasNext() ;) {\r
+ FeatureTree tree = k.next();\r
+ descriptionService.saveFeatureTree(tree);\r
+ }\r
\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
- if (ref != null) {\r
- if (!ref.equals("")) {\r
- this.addCdmBaseWithImage(ref,categoricalCharacter);\r
- }\r
- }\r
- }\r
+}\r
\r
- // <States>\r
- Element elStates = elCategoricalCharacter.getChild("States",sddNamespace);\r
+// imports the default language of the dataset\r
+protected void importDatasetLanguage(Element elDataset, SDDImportConfigurator sddConfig){\r
+ String nameLang = elDataset.getAttributeValue("lang",xmlNamespace);\r
\r
- // <StateDefinition id="s1">\r
- List<Element> elStateDefinitions = elStates.getChildren("StateDefinition",sddNamespace);\r
- TermVocabulary<State> termVocabularyState = new TermVocabulary<State>();\r
+ if (!nameLang.equals("")) {\r
+ String iso = nameLang.substring(0, 2);\r
+ datasetLanguage = getTermService().getLanguageByIso(iso);\r
+ } else {\r
+ datasetLanguage = Language.ENGLISH();\r
+ }\r
+ if (datasetLanguage == null) {\r
+ datasetLanguage = Language.ENGLISH();\r
+ }\r
+}\r
\r
- int k = 0;\r
- //for each StateDefinition\r
- for (Element elStateDefinition : elStateDefinitions){\r
+// imports the revision data associated with the Dataset (authors, modifications)\r
+protected void importRevisionData(Element elDataset, Namespace sddNamespace){\r
+ // <RevisionData>\r
+ logger.info("start RevisionData ...");\r
+ Element elRevisionData = elDataset.getChild("RevisionData",sddNamespace);\r
\r
- if ((++k % modCount) == 0){ logger.info("StateDefinitions handled: " + (k-1));}\r
+ // <Creators>\r
+ Element elCreators = elRevisionData.getChild("Creators",sddNamespace);\r
\r
- String idSD = elStateDefinition.getAttributeValue("id");\r
- // <Representation>\r
- // <Label>Simple</Label>\r
- // <MediaObject ref="ib" role="Primary"/>\r
- // </Representation>\r
- elRepresentation = elStateDefinition.getChild("Representation",sddNamespace);\r
- label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
+ // <Agent role="aut" ref="a1"/>\r
+ List<Element> listAgents = elCreators.getChildren("Agent", sddNamespace);\r
\r
- State state = new State(label,label,label);\r
+ int j = 0;\r
+ //for each Agent\r
+ for (Element elAgent : listAgents){\r
\r
- listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
+ String role = elAgent.getAttributeValue("role");\r
+ String ref = elAgent.getAttributeValue("ref");\r
+ if (role.equals("aut")) {\r
+ if(!ref.equals("")) {\r
+ authors.put(ref, null);\r
+ }\r
+ }\r
+ if (role.equals("edt")) {\r
+ if(!ref.equals("")) {\r
+ editors.put(ref, null);\r
+ }\r
+ }\r
\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
+ if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);}\r
\r
- if (ref != null) {\r
- if (!ref.equals("")) {\r
- this.addCdmBaseWithImage(ref,state);\r
- }\r
- }\r
- }\r
+ }\r
\r
- StateData stateData = StateData.NewInstance();\r
- stateData.setState(state);\r
- termVocabularyState.addTerm(state);\r
- stateDatas.put(idSD,stateData);\r
- }\r
+ // <DateModified>2006-04-08T00:00:00</DateModified>\r
+ String stringDateModified = (String)ImportHelper.getXmlInputValue(elRevisionData, "DateModified",sddNamespace);\r
+\r
+ if (stringDateModified != null) {\r
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");\r
+ Date d = null;\r
+ try {\r
+ d = sdf.parse(stringDateModified);\r
+ } catch(Exception e) {\r
+ System.err.println("Exception :");\r
+ e.printStackTrace();\r
+ }\r
\r
- categoricalCharacter.addSupportedCategoricalEnumeration(termVocabularyState);\r
- features.put(idCC, categoricalCharacter);\r
+ DateTime updated = null;\r
+ if (d != null) {\r
+ updated = new DateTime(d);\r
+ sourceReference.setUpdated(updated);\r
+ sec.setUpdated(updated);\r
+ }\r
+ }\r
+}\r
\r
- } catch (Exception e) {\r
- //FIXME\r
- logger.warn("Import of CategoricalCharacter " + j + " failed.");\r
- success = false; \r
+// imports ipr statements associated with a dataset\r
+protected void importIPRStatements(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig){\r
+ // <IPRStatements>\r
+ logger.info("start IPRStatements ...");\r
+ Element elIPRStatements = elDataset.getChild("IPRStatements",sddNamespace);\r
+ // <IPRStatement role="Copyright">\r
+ if (elIPRStatements != null) {\r
+ List<Element> listIPRStatements = elIPRStatements.getChildren("IPRStatement", sddNamespace);\r
+ int j = 0;\r
+ //for each IPRStatement\r
+\r
+ for (Element elIPRStatement : listIPRStatements){\r
+\r
+ String role = elIPRStatement.getAttributeValue("role");\r
+ // <Label xml:lang="en-au">(c) 2003-2006 Centre for Occasional Botany.</Label>\r
+ Element elLabel = elIPRStatement.getChild("Label",sddNamespace);\r
+ String lang = "";\r
+ if (elLabel != null) {\r
+ lang = elLabel.getAttributeValue("lang",xmlNamespace);\r
+ }\r
+ String label = (String)ImportHelper.getXmlInputValue(elIPRStatement, "Label",sddNamespace);\r
+\r
+ if (role.equals("Copyright")) {\r
+ Language iprLanguage = null;\r
+ if (lang != null) {\r
+ if (!lang.equals("")) {\r
+ iprLanguage = getTermService().getLanguageByIso(lang.substring(0, 2));\r
+ //iprLanguage = datasetLanguage;\r
+ } else {\r
+ iprLanguage = datasetLanguage;\r
}\r
-\r
- if ((++j % modCount) == 0){ logger.info("CategoricalCharacters handled: " + j);}\r
-\r
}\r
+ if (iprLanguage == null) {\r
+ iprLanguage = datasetLanguage;\r
+ }\r
+ copyright = Rights.NewInstance(label, iprLanguage);\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
-\r
- try {\r
+ if (copyright != null) {\r
+ sourceReference.addRights(copyright);\r
+ sec.addRights(copyright);\r
+ }\r
\r
- String idQC = elQuantitativeCharacter.getAttributeValue("id");\r
+ if ((++j % modCount) == 0){ logger.info("IPRStatements handled: " + j);}\r
\r
- // <Representation>\r
- // <Label>Leaf length</Label>\r
- // </Representation>\r
- elRepresentation = elQuantitativeCharacter.getChild("Representation",sddNamespace);\r
- label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
+ }\r
+ }\r
+}\r
\r
- Feature quantitativeCharacter = Feature.NewInstance();\r
+// imports the taxon names\r
+protected void importTaxonNames(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig){\r
+ // <TaxonNames>\r
+ logger.info("start TaxonNames ...");\r
+ Element elTaxonNames = elDataset.getChild("TaxonNames",sddNamespace);\r
+ // <TaxonName id="t1" uri="urn:lsid:authority:namespace:my-own-id">\r
+ if (elTaxonNames != null) {\r
+ List<Element> listTaxonNames = elTaxonNames.getChildren("TaxonName", sddNamespace);\r
+ int j = 0;\r
+ //for each TaxonName\r
+ for (Element elTaxonName : listTaxonNames){\r
+\r
+ String id = elTaxonName.getAttributeValue("id");\r
+ String uri = elTaxonName.getAttributeValue("uri");\r
+\r
+ NonViralName tnb = null;\r
+ if (!id.equals("")) {\r
+ tnb = NonViralName.NewInstance(null);\r
+ OriginalSource source = null;\r
+ if (uri != null) {\r
+ if (!uri.equals("")) {\r
+ source = OriginalSource.NewInstance(id, "TaxonName", Generic.NewInstance(), uri);\r
+ }\r
+ } else {\r
+ source = OriginalSource.NewInstance(id, "TaxonName");\r
+ }\r
+ tnb.addSource(source);\r
+ taxonNameBases.put(id,tnb);\r
+ }\r
\r
- if (!label.equals("")){\r
- quantitativeCharacter = Feature.NewInstance(label, label, label);\r
- }\r
- quantitativeCharacter.setSupportsQuantitativeData(true);\r
- quantitativeCharacter.setSupportsTextData(false);\r
+ // <Representation>\r
+ // <Label xml:lang="la">Viola hederacea Labill.</Label>\r
+ importRepresentation(elTaxonName, sddNamespace, tnb, id, sddConfig);\r
\r
- listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
+ if ((++j % modCount) == 0){ logger.info("TaxonNames handled: " + j);}\r
\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
- if (ref != null) {\r
- if (!ref.equals("")) {\r
- this.addCdmBaseWithImage(ref,quantitativeCharacter);\r
- }\r
- }\r
- }\r
+ }\r
+ }\r
+}\r
\r
- // <MeasurementUnit>\r
- // <Label role="Abbrev">m</Label>\r
- // </MeasurementUnit>\r
- Element elMeasurementUnit = elQuantitativeCharacter.getChild("MeasurementUnit",sddNamespace);\r
- 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
+// imports the representation (label, detail, lang) of a particular SDD element\r
+protected void importCharacters(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
+ // <Characters>\r
+ logger.info("start Characters ...");\r
+ Element elCharacters = elDataset.getChild("Characters", sddNamespace);\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
+ // <CategoricalCharacter id="c1">\r
+ if (elCharacters != null) {\r
+ List<Element> elCategoricalCharacters = elCharacters.getChildren("CategoricalCharacter", sddNamespace);\r
+ int j = 0;\r
+ //for each CategoricalCharacter\r
+ for (Element elCategoricalCharacter : elCategoricalCharacters){\r
\r
- if (unit != null) {\r
- units.put(idQC, unit);\r
- }\r
+ try {\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
- }\r
- }\r
+ String idCC = elCategoricalCharacter.getAttributeValue("id");\r
\r
- features.put(idQC, quantitativeCharacter);\r
+ // <Representation>\r
+ // <Label> Leaf complexity</Label>\r
+ // </Representation>\r
\r
- } catch (Exception e) {\r
- //FIXME\r
- logger.warn("Import of QuantitativeCharacter " + j + " failed.");\r
- success = false; \r
- }\r
+ Feature categoricalCharacter = Feature.NewInstance();\r
+ importRepresentation(elCategoricalCharacter, sddNamespace, categoricalCharacter, idCC, sddConfig);\r
\r
- if ((++j % modCount) == 0){ logger.info("QuantitativeCharacters handled: " + j);}\r
+ categoricalCharacter.setSupportsCategoricalData(true);\r
\r
- }\r
+ // <States>\r
+ Element elStates = elCategoricalCharacter.getChild("States",sddNamespace);\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
+ // <StateDefinition id="s1">\r
+ List<Element> elStateDefinitions = elStates.getChildren("StateDefinition",sddNamespace);\r
+ TermVocabulary<State> termVocabularyState = new TermVocabulary<State>();\r
\r
- try {\r
+ int k = 0;\r
+ //for each StateDefinition\r
+ for (Element elStateDefinition : elStateDefinitions){\r
\r
- String idTC = elTextCharacter.getAttributeValue("id");\r
-\r
- // <Representation>\r
- // <Label xml:lang="en">Leaf features not covered by other characters</Label>\r
- // </Representation>\r
- elRepresentation = elTextCharacter.getChild("Representation",sddNamespace);\r
- Element elLabel = elRepresentation.getChild("Label",sddNamespace);\r
- nameLang = elLabel.getAttributeValue("lang",xmlNamespace);\r
- Language language = null;\r
- if (nameLang != null) {\r
- if (!nameLang.equals("")) {\r
- language = config.getCdmAppController().getTermService().getLanguageByIso(nameLang.substring(0, 2));\r
- //language = datasetLanguage;\r
- } else {\r
- language = datasetLanguage;\r
- }\r
- } else {\r
- language = datasetLanguage;\r
- }\r
+ if ((++k % modCount) == 0){ logger.info("StateDefinitions handled: " + (k-1));}\r
\r
- label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
+ String idSD = elStateDefinition.getAttributeValue("id");\r
+ // <Representation>\r
+ // <Label>Simple</Label>\r
+ // <MediaObject ref="ib" role="Primary"/>\r
+ // </Representation>\r
+ State state = State.NewInstance();\r
+ importRepresentation(elStateDefinition, sddNamespace, state, idSD, sddConfig);\r
+\r
+ StateData stateData = StateData.NewInstance();\r
+ stateData.setState(state);\r
+ termVocabularyState.addTerm(state);\r
+ stateDatas.put(idSD,stateData);\r
+ }\r
\r
- Feature textCharacter = Feature.NewInstance();\r
+ categoricalCharacter.addSupportedCategoricalEnumeration(termVocabularyState);\r
+ features.put(idCC, categoricalCharacter);\r
\r
- if (label != null) {\r
- if (!label.equals("")){\r
- textCharacter = Feature.NewInstance(label, label, label);\r
- textCharacter.setLabel(label, language);\r
- }\r
- }\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Import of CategoricalCharacter " + j + " failed.");\r
+ success = false; \r
+ }\r
\r
- textCharacter.setSupportsQuantitativeData(false);\r
- textCharacter.setSupportsTextData(true);\r
+ if ((++j % modCount) == 0){ logger.info("CategoricalCharacters handled: " + j);}\r
\r
- features.put(idTC, textCharacter);\r
+ }\r
\r
- listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\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
+ try {\r
+\r
+ String idQC = elQuantitativeCharacter.getAttributeValue("id");\r
+\r
+ // <Representation>\r
+ // <Label>Leaf length</Label>\r
+ // </Representation>\r
+ Feature quantitativeCharacter = Feature.NewInstance();\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
- 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
- if (ref != null) {\r
- if (!ref.equals("")) {\r
- this.addCdmBaseWithImage(ref,textCharacter);\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
-\r
- } catch (Exception e) {\r
- //FIXME\r
- logger.warn("Import of TextCharacter " + j + " failed.");\r
- success = false; \r
+ } else {\r
+ unit = MeasurementUnit.NewInstance(label,label,label);\r
}\r
+ }\r
\r
- if ((++j % modCount) == 0){ logger.info("TextCharacters handled: " + j);}\r
+ if (unit != null) {\r
+ units.put(idQC, unit);\r
+ }\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
+ }\r
}\r
\r
- }\r
+ features.put(idQC, quantitativeCharacter);\r
\r
- // <CodedDescriptions>\r
- logger.info("start CodedDescriptions ...");\r
- Element elCodedDescriptions = elDataset.getChild("CodedDescriptions",sddNamespace);\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Import of QuantitativeCharacter " + j + " failed.");\r
+ success = false; \r
+ }\r
\r
- // <CodedDescription id="D101">\r
+ if ((++j % modCount) == 0){ logger.info("QuantitativeCharacters handled: " + j);}\r
\r
- Map<String,String> citations = new HashMap<String,String>();\r
- Map<String,String> locations = new HashMap<String,String>();\r
+ }\r
\r
- if (elCodedDescriptions != null) {\r
- List<Element> listCodedDescriptions = elCodedDescriptions.getChildren("CodedDescription", sddNamespace);\r
- j = 0;\r
- //for each CodedDescription\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
- for (Element elCodedDescription : listCodedDescriptions){\r
+ try {\r
\r
- try {\r
+ String idTC = elTextCharacter.getAttributeValue("id");\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
- elRepresentation = elCodedDescription.getChild("Representation",sddNamespace);\r
- Element elLabel = elRepresentation.getChild("Label",sddNamespace);\r
- label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
-\r
- TaxonDescription taxonDescription = TaxonDescription.NewInstance();\r
- taxonDescription.setTitleCache(label);\r
- OriginalSource source = OriginalSource.NewInstance(idCD, "CodedDescription");\r
- taxonDescription.addSource(source);\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
-\r
- NonViralName taxonNameBase = taxonNameBases.get(ref);\r
- taxon = Taxon.NewInstance(taxonNameBase, sec);\r
- }\r
+ // <Representation>\r
+ // <Label xml:lang="en">Leaf features not covered by other characters</Label>\r
+ // </Representation>\r
+ Feature textCharacter = Feature.NewInstance();\r
+ importRepresentation(elTextCharacter, sddNamespace, textCharacter, idTC, sddConfig);\r
\r
- String refCitation = "";\r
- String location = "";\r
+ textCharacter.setSupportsTextData(true);\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
+ features.put(idTC, textCharacter);\r
\r
- // <SummaryData>\r
- Element elSummaryData = elCodedDescription.getChild("SummaryData",sddNamespace);\r
-\r
- if (elSummaryData != null) {\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.info("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
- //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
- StateData stateData = stateDatas.get(ref);\r
- categoricalData.addState(stateData);\r
- }\r
- taxonDescription.addElement(categoricalData);\r
- }\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Import of TextCharacter " + j + " failed.");\r
+ success = false; \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.info("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
- // <Measure type="Min" value="2.3"/>\r
- List<Element> elMeasures = elQuantitative.getChildren("Measure", sddNamespace);\r
- int l = 0;\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
- value = elMeasure.getAttributeValue("value");\r
- float v = Float.parseFloat(value);\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
- // Create a new StatisticalMeasure for standard deviation\r
- t = StatisticalMeasure.STANDARD_DEVIATION();\r
- } else if (type.equals("N")) {\r
- t = StatisticalMeasure.SAMPLE_SIZE();\r
- } else {\r
- t = StatisticalMeasure.NewInstance(type,type,type);\r
- statisticalMeasures.add(t);\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
+ if ((++j % modCount) == 0){ logger.info("TextCharacters handled: " + j);}\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
\r
- }\r
+ }\r
+ \r
+ for (Iterator<Feature> f = features.values().iterator() ; f.hasNext() ;){\r
+ featureSet.add(f.next());\r
+ }\r
+ \r
+}\r
\r
- if (taxon != null) {\r
- taxon.addDescription(taxonDescription);\r
- }\r
+// imports the descriptions of taxa (specimens TODO)\r
+protected void importCodedDescriptions(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
+ // <CodedDescriptions>\r
+ logger.info("start CodedDescriptions ...");\r
+ Element elCodedDescriptions = elDataset.getChild("CodedDescriptions",sddNamespace);\r
\r
- if (!refCitation.equals("")){\r
- citations.put(idCD,refCitation);\r
- }\r
+ // <CodedDescription id="D101">\r
\r
- if (!location.equals("")){\r
- locations.put(idCD, location);\r
- }\r
+ if (elCodedDescriptions != null) {\r
+ List<Element> listCodedDescriptions = elCodedDescriptions.getChildren("CodedDescription", sddNamespace);\r
+ int j = 0;\r
+ //for each CodedDescription\r
\r
- taxonDescriptions.put(idCD, taxonDescription);\r
+ for (Element elCodedDescription : listCodedDescriptions){\r
\r
- listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
+ try {\r
\r
- for (Element elMediaObject : listMediaObjects) {\r
- ref = null;\r
- String role = null;\r
- if (elMediaObject != null) {\r
- ref = elMediaObject.getAttributeValue("ref");\r
- role = elMediaObject.getAttributeValue("role");\r
- }\r
- if (ref != null) {\r
- if (!ref.equals("")) {\r
- if (taxonDescription.getDescriptionSources().toArray().length > 0) {\r
- this.addCdmBaseWithImage(ref,(ReferenceBase) taxonDescription.getDescriptionSources().toArray()[0]);\r
- } else {\r
- ReferenceBase descriptionSource = Generic.NewInstance();\r
- taxonDescription.addDescriptionSource(descriptionSource);\r
- this.addCdmBaseWithImage(ref,descriptionSource);\r
- }\r
-\r
- }\r
- }\r
- }\r
+ String idCD = elCodedDescription.getAttributeValue("id");\r
\r
- } catch (Exception e) {\r
- //FIXME\r
- logger.warn("Import of CodedDescription " + j + " failed.");\r
- success = false; \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
- if ((++j % modCount) == 0){ logger.info("CodedDescriptions handled: " + j);}\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
\r
+ NonViralName taxonNameBase = taxonNameBases.get(ref);\r
+ taxon = Taxon.NewInstance(taxonNameBase, sec);\r
}\r
\r
- }\r
+ String refCitation = "";\r
+ String location = "";\r
\r
- // <Agents>\r
- logger.info("start Agents ...");\r
- Element elAgents = elDataset.getChild("Agents",sddNamespace);\r
-\r
- // <Agent id="a1">\r
- listAgents = elAgents.getChildren("Agent", sddNamespace);\r
- j = 0;\r
- //for each Agent\r
- for (Element elAgent : listAgents){\r
-\r
- try {\r
-\r
- String idA = elAgent.getAttributeValue("id");\r
-\r
- // <Representation>\r
- // <Label>Kevin Thiele</Label>\r
- // <Detail role="Description">Ali Baba is also known as r.a.m.</Detail>\r
- // </Representation>\r
- elRepresentation = elAgent.getChild("Representation",sddNamespace);\r
- label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
- Element elDetail = elRepresentation.getChild("Detail",sddNamespace);\r
-\r
- Person person = Person.NewTitledInstance(label);\r
- OriginalSource source = OriginalSource.NewInstance(idA, "Agent");\r
- person.addSource(source);\r
-\r
- if (elDetail != null) {\r
- String role = elDetail.getAttributeValue("role");\r
- detail = (String)ImportHelper.getXmlInputValue(elRepresentation, "Detail",sddNamespace);\r
- annotation = Annotation.NewInstance(role + " - " + detail, datasetLanguage);\r
- person.addAnnotation(annotation);\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
\r
- // <Links>\r
- Element elLinks = elAgent.getChild("Links",sddNamespace);\r
-\r
- if (elLinks != null) {\r
-\r
- // <Link rel="Alternate" href="http://www.diversitycampus.net/people/hagedorn"/>\r
- List<Element> listLinks = elLinks.getChildren("Link", sddNamespace);\r
- int k = 0;\r
- //for each Link\r
- for (Element elLink : listLinks){\r
-\r
- try {\r
-\r
- String rel = elLink.getAttributeValue("rel");\r
- String href = elLink.getAttributeValue("href");\r
-\r
- if (k==1) {\r
- source = OriginalSource.NewInstance(rel, href);\r
- person.addSource(source);\r
- }\r
+ // <SummaryData>\r
+ Element elSummaryData = elCodedDescription.getChild("SummaryData",sddNamespace);\r
+\r
+ if (elSummaryData != null) {\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.info("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
+ //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
+ StateData stateData = stateDatas.get(ref);\r
+ categoricalData.addState(stateData);\r
+ }\r
+ taxonDescription.addElement(categoricalData);\r
+ }\r
\r
- } catch (Exception e) {\r
- //FIXME\r
- logger.warn("Import of Link " + k + " failed.");\r
- success = false; \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.info("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 ((++k % modCount) == 0){ logger.info("Links handled: " + k);}\r
+ // <Measure type="Min" value="2.3"/>\r
+ List<Element> elMeasures = elQuantitative.getChildren("Measure", sddNamespace);\r
+ int l = 0;\r
+ //for each State\r
+ for (Element elMeasure : elMeasures){\r
+ if ((++l % modCount) == 0){ logger.info("States handled: " + (l-1));}\r
+ String type = elMeasure.getAttributeValue("type");\r
+ String value = elMeasure.getAttributeValue("value");\r
+ float v = Float.parseFloat(value);\r
+ 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
+ // Create a new StatisticalMeasure for standard deviation\r
+ t = StatisticalMeasure.STANDARD_DEVIATION();\r
+ } else if (type.equals("N")) {\r
+ t = StatisticalMeasure.SAMPLE_SIZE();\r
+ } else {\r
+ t = StatisticalMeasure.NewInstance(type,type,type);\r
+ statisticalMeasures.add(t);\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
- }\r
- if (authors.containsKey(idA)) {\r
- authors.put(idA,person);\r
+ taxonDescription.addElement(quantitativeData);\r
}\r
\r
- if (editors.containsKey(idA)) {\r
- editors.put(idA, person);\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
- listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
-\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
- if (ref != null) {\r
- if (!ref.equals("")) {\r
- this.addCdmBaseWithImage(ref,person);\r
- }\r
- }\r
- }\r
+ }\r
\r
- } catch (Exception e) {\r
- //FIXME\r
- logger.warn("Import of Agent " + j + " failed.");\r
- success = false; \r
+ if (taxon != null) {\r
+ taxon.addDescription(taxonDescription);\r
}\r
\r
- if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);}\r
+ if (!refCitation.equals("")){\r
+ citations.put(idCD,refCitation);\r
+ }\r
\r
+ if (!location.equals("")){\r
+ locations.put(idCD, location);\r
+ }\r
+ \r
+ taxonDescription.setDescriptiveSystem(featureSet);\r
+ \r
+ taxonDescriptions.put(idCD, taxonDescription);\r
+\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Import of CodedDescription " + j + " failed.");\r
+ success = false; \r
}\r
\r
- // <Publications>\r
- logger.info("start Publications ...");\r
- Element elPublications = elDataset.getChild("Publications",sddNamespace);\r
+ if ((++j % modCount) == 0){ logger.info("CodedDescriptions handled: " + j);}\r
\r
- if (elPublications != null) {\r
- // <Publication id="p1">\r
- List<Element> listPublications = elPublications.getChildren("Publication", sddNamespace);\r
- j = 0;\r
- //for each Publication\r
- for (Element elPublication : listPublications){\r
+ }\r
\r
- try {\r
+ }\r
+}\r
\r
- String idP = elPublication.getAttributeValue("id");\r
+// imports the persons associated with the dataset creation, modification, related publications\r
+protected void importAgents(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
+ // <Agents>\r
+ logger.info("start Agents ...");\r
+ Element elAgents = elDataset.getChild("Agents",sddNamespace);\r
\r
- // <Representation>\r
- // <Label>Sample Citation</Label>\r
- // </Representation>\r
- elRepresentation = elPublication.getChild("Representation",sddNamespace);\r
- label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
- Article publication = Article.NewInstance();\r
- publication.setTitle(label);\r
- OriginalSource source = OriginalSource.NewInstance(idP, "Publication");\r
- publication.addSource(source);\r
+ // <Agent id="a1">\r
+ List <Element> listAgents = elAgents.getChildren("Agent", sddNamespace);\r
+ int j = 0;\r
+ //for each Agent\r
+ for (Element elAgent : listAgents){\r
\r
- publications.put(idP,publication);\r
+ try {\r
\r
- listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
+ String idA = elAgent.getAttributeValue("id");\r
\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
- if (ref != null) {\r
- if (!ref.equals("")) {\r
- this.addCdmBaseWithImage(ref,publication);\r
- }\r
- }\r
- }\r
+ // <Representation>\r
+ // <Label>Kevin Thiele</Label>\r
+ // <Detail role="Description">Ali Baba is also known as r.a.m.</Detail>\r
+ // </Representation>\r
+ Person person = Person.NewInstance();\r
+ importRepresentation(elAgent, sddNamespace, person, idA, sddConfig);\r
+ person.addSource(OriginalSource.NewInstance(idA, "Agent"));\r
+\r
+ // <Links>\r
+ Element elLinks = elAgent.getChild("Links",sddNamespace);\r
+\r
+ if (elLinks != null) {\r
+\r
+ // <Link rel="Alternate" href="http://www.diversitycampus.net/people/hagedorn"/>\r
+ List<Element> listLinks = elLinks.getChildren("Link", sddNamespace);\r
+ int k = 0;\r
+ //for each Link\r
+ for (Element elLink : listLinks){\r
+\r
+ try {\r
+\r
+ String rel = elLink.getAttributeValue("rel");\r
+ String href = elLink.getAttributeValue("href");\r
+\r
+ Media link = Media.NewInstance();\r
+ MediaRepresentation mr = MediaRepresentation.NewInstance();\r
+ mr.addRepresentationPart(MediaRepresentationPart.NewInstance(href, null));\r
+ link.addRepresentation(mr);\r
+ person.addMedia(link);\r
\r
} catch (Exception e) {\r
//FIXME\r
- logger.warn("Import of Publication " + j + " failed.");\r
+ logger.warn("Import of Link " + k + " failed.");\r
success = false; \r
}\r
\r
- if ((++j % modCount) == 0){ logger.info("Publications handled: " + j);}\r
+ if ((++k % modCount) == 0){ logger.info("Links handled: " + k);}\r
\r
}\r
}\r
+ if (authors.containsKey(idA)) {\r
+ authors.put(idA,person);\r
+ }\r
\r
- // <MediaObjects>\r
- logger.info("start MediaObjects ...");\r
- Element elMediaObjects = elDataset.getChild("MediaObjects",sddNamespace);\r
+ if (editors.containsKey(idA)) {\r
+ editors.put(idA, person);\r
+ }\r
\r
- if (elMediaObjects != null) {\r
- // <MediaObject id="m1">\r
- listMediaObjects = elMediaObjects.getChildren("MediaObject", sddNamespace);\r
- j = 0;\r
- //for each Publication\r
- for (Element elMO : listMediaObjects){\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Import of Agent " + j + " failed.");\r
+ success = false; \r
+ }\r
\r
- try {\r
+ if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);}\r
\r
- String idMO = elMO.getAttributeValue("id");\r
-\r
- // <Representation>\r
- // <Label>Image description, e.g. to be used for alt-attribute in html.</Label>\r
- // </Representation>\r
- elRepresentation = elMO.getChild("Representation",sddNamespace);\r
- label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
- MultilanguageText m = MultilanguageText.NewInstance(LanguageString.NewInstance(label, datasetLanguage));\r
- // mediaObjects.get(idMO).setTitle(m);\r
- OriginalSource originalSource = OriginalSource.NewInstance(idMO, "MediaObject");\r
- // NO MEDIA SOURCE AVAILABLE\r
- // media.addSource();\r
-\r
- // <Type>Image</Type>\r
- // <Source href="http://test.edu/test.jpg"/>\r
- String type = (String)ImportHelper.getXmlInputValue(elMO,"Type",sddNamespace);\r
- Element elSource = elMO.getChild("Source",sddNamespace);\r
- String href = elSource.getAttributeValue("href");\r
-\r
- ImageMetaData imageMetaData = new ImageMetaData();\r
- ImageFile image = null;\r
-\r
- if (href.substring(0,7).equals("http://")) {\r
- try{\r
- URL url = new URL(href);\r
- imageMetaData.readFrom(url);\r
- image = ImageFile.NewInstance(url.toString(), null, imageMetaData);\r
- } catch (MalformedURLException e) {\r
- logger.error("Malformed URL", e);\r
- }\r
- } else {\r
- String sns = config.getSourceNameString();\r
- File f = new File(sns);\r
- File parent = f.getParentFile();\r
- String fi = parent.toString() + File.separator + href;\r
- File file = new File(fi);\r
- imageMetaData.readFrom(file);\r
- image = ImageFile.NewInstance(file.toString(), null, imageMetaData);\r
- }\r
+ }\r
+}\r
\r
- MediaRepresentation representation = MediaRepresentation.NewInstance(imageMetaData.getMimeType(), null);\r
- representation.addRepresentationPart(image);\r
-\r
- Media media = Media.NewInstance();\r
- media.addRepresentation(representation);\r
- // media.setTitle(m);\r
-\r
- ArrayList<CdmBase> lcb = (ArrayList<CdmBase>) mediaObject_ListCdmBase.get(idMO);\r
- if (lcb != null) {\r
- // for (int k = 0; k < lcb.size(); k++) {\r
- // if (lcb.get(k) instanceof DefinedTermBase) {\r
- // DefinedTermBase dtb = (DefinedTermBase) lcb.get(k);\r
- if (lcb.get(0) instanceof DefinedTermBase) {\r
- DefinedTermBase dtb = (DefinedTermBase) lcb.get(0);\r
- if (dtb!=null) {\r
- dtb.addMedia(media);\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
- // rb.setTitleCache(label);\r
- if (rb!=null) {\r
- rb.addMedia(media);\r
- }\r
- }\r
- }\r
+// imports publications related with the data set\r
+protected void importPublications(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
+ // <Publications>\r
+ logger.info("start Publications ...");\r
+ Element elPublications = elDataset.getChild("Publications",sddNamespace);\r
\r
- } catch (Exception e) {\r
- //FIXME\r
- logger.warn("Import of MediaObject " + j + " failed.");\r
- success = false; \r
- }\r
+ if (elPublications != null) {\r
+ // <Publication id="p1">\r
+ List<Element> listPublications = elPublications.getChildren("Publication", sddNamespace);\r
+ int j = 0;\r
+ //for each Publication\r
+ for (Element elPublication : listPublications){\r
\r
- if ((++j % modCount) == 0){ logger.info("MediaObjects handled: " + j);}\r
+ try {\r
\r
- }\r
- }\r
+ String idP = elPublication.getAttributeValue("id");\r
\r
- /*\r
- // when several authors are supported\r
- if (authors.size()>1) {\r
- for (Iterator<Person> author = authors.values().iterator() ; author.hasNext() ;){\r
- sourceReference.setCreatedBy(author.next());\r
- }\r
- } else {\r
- Team team = Team.NewInstance();\r
- for (Iterator<Person> author = authors.values().iterator() ; author.hasNext() ;){\r
- team.addTeamMember(author.next());\r
- }\r
- sourceReference.setCreatedBy(team);\r
- }\r
- */\r
+ // <Representation>\r
+ // <Label>Sample Citation</Label>\r
+ // </Representation>\r
+ Article publication = Article.NewInstance();\r
+ importRepresentation(elPublication, sddNamespace, publication, idP, sddConfig);\r
\r
- Iterator<Person> author = authors.values().iterator();\r
- if (author.hasNext()){\r
- Person a = author.next();\r
- sourceReference.setCreatedBy(a);\r
- sec.setCreatedBy(a);\r
- }\r
+ publications.put(idP,publication);\r
\r
- Iterator<Person> editor = editors.values().iterator();\r
- if (editor.hasNext()){\r
- Person e = editor.next();\r
- sourceReference.setUpdatedBy(e);\r
- sec.setUpdatedBy(e);\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Import of Publication " + j + " failed.");\r
+ success = false; \r
}\r
\r
- if (copyright != null) {\r
- sourceReference.addRights(copyright);\r
- sec.addRights(copyright);\r
- }\r
+ if ((++j % modCount) == 0){ logger.info("Publications handled: " + j);}\r
\r
- for (Iterator<String> refCD = taxonDescriptions.keySet().iterator() ; refCD.hasNext() ;){\r
- String ref = refCD.next();\r
- TaxonDescription td = taxonDescriptions.get(ref);\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
+ }\r
+ }\r
+}\r
+\r
+// imports media objects such as images\r
+protected void importMediaObjects(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
+ // <MediaObjects>\r
+ logger.info("start MediaObjects ...");\r
+ Element elMediaObjects = elDataset.getChild("MediaObjects",sddNamespace);\r
+\r
+ if (elMediaObjects != null) {\r
+ // <MediaObject id="m1">\r
+ List<Element> listMediaObjects = elMediaObjects.getChildren("MediaObject", sddNamespace);\r
+ int j = 0;\r
+ //for each Publication\r
+ for (Element elMO : listMediaObjects){\r
+\r
+ String id = "";\r
+\r
+ try {\r
+\r
+ String idMO = elMO.getAttributeValue("id");\r
+ id = idMO;\r
+\r
+ // <Representation>\r
+ // <Label>Image description, e.g. to be used for alt-attribute in html.</Label>\r
+ // </Representation>\r
+ Media media = Media.NewInstance();\r
+ importRepresentation(elMO, sddNamespace, media, idMO, sddConfig);\r
+\r
+ // <Type>Image</Type>\r
+ // <Source href="http://test.edu/test.jpg"/>\r
+ String type = (String)ImportHelper.getXmlInputValue(elMO,"Type",sddNamespace);\r
+\r
+ if ((type != null) && (type.equals("Image"))) {\r
+ Element elSource = elMO.getChild("Source",sddNamespace);\r
+ String href = elSource.getAttributeValue("href");\r
+\r
+ ImageMetaData imageMetaData = new ImageMetaData();\r
+ ImageFile image = null;\r
+\r
+ if (href.substring(0,7).equals("http://")) {\r
+ try{\r
+ URL url = new URL(href);\r
+ imageMetaData.readFrom(url);\r
+ image = ImageFile.NewInstance(url.toString(), null, imageMetaData);\r
+ } catch (MalformedURLException e) {\r
+ logger.error("Malformed URL", e);\r
+ }\r
+ } else {\r
+ String sns = sddConfig.getSourceNameString();\r
+ File f = new File(sns);\r
+ File parent = f.getParentFile();\r
+ String fi = parent.toString() + File.separator + href;\r
+ File file = new File(fi);\r
+ imageMetaData.readFrom(file);\r
+ image = ImageFile.NewInstance(file.toString(), null, imageMetaData);\r
+ }\r
+\r
+ MediaRepresentation representation = MediaRepresentation.NewInstance(imageMetaData.getMimeType(), null);\r
+ representation.addRepresentationPart(image);\r
+\r
+ media.addRepresentation(representation);\r
+\r
+ ArrayList<CdmBase> lcb = (ArrayList<CdmBase>) mediaObject_ListCdmBase.get(idMO);\r
+ if (lcb != null) {\r
+ for (int k = 0; k < lcb.size(); k++) {\r
+ if (lcb.get(k) instanceof DefinedTermBase) {\r
+ DefinedTermBase dtb = (DefinedTermBase) lcb.get(k);\r
+ // if (lcb.get(0) instanceof DefinedTermBase) {\r
+ // DefinedTermBase dtb = (DefinedTermBase) lcb.get(0);\r
+ // if (dtb!=null) {\r
+ // if (k == 0) {\r
+ dtb.addMedia(media);\r
+ // } else {\r
+ // Media me = (Media) media.clone();\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
+ // rb.setTitleCache(label);\r
+ // if (rb!=null) {\r
+ // if (k == 0) {\r
+ rb.addMedia(media);\r
+ // } else {\r
+ // Media me = (Media) media.clone();\r
+ // rb.addMedia(me);\r
+ // }\r
+ // }\r
+ }\r
+ }\r
}\r
- td.addDescriptionSource(publication);\r
}\r
- }\r
\r
- if ((++i % modCount) == 0){ logger.info("Datasets handled: " + i);}\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Could not attached MediaObject " + j + "(SDD: " + id + ") to several objects.");\r
+ success = false; \r
+ }\r
\r
- config.setSourceReference(sourceReference);\r
+ if ((++j % modCount) == 0){ logger.info("MediaObjects handled: " + j);\r
\r
+ }\r
}\r
- logger.info(i + " Datasets handled");\r
+ }\r
+}\r
\r
- ITermService termService = config.getCdmAppController().getTermService();\r
- for (Iterator<StateData> k = stateDatas.values().iterator() ; k.hasNext() ;){\r
- StateData sd = k.next();\r
- termService.saveTerm(sd.getState()); \r
- }\r
- for (Iterator<Feature> k = features.values().iterator() ; k.hasNext() ;){\r
- Feature feature = k.next();\r
- termService.saveTerm(feature); \r
- }\r
- if (units != null) {\r
- for (Iterator<MeasurementUnit> k = units.values().iterator() ; k.hasNext() ;){\r
- MeasurementUnit unit = k.next();\r
- if (unit != null) {\r
- termService.saveTerm(unit); \r
- }\r
+// imports the <DescriptiveConcepts> block\r
+protected void importDescriptiveConcepts(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig){\r
+ // <DescriptiveConcepts>\r
+ logger.info("start DescriptiveConcepts ...");\r
+ Element elDescriptiveConcepts = elDataset.getChild("DescriptiveConcepts",sddNamespace);\r
+ // <DescriptiveConcept id="b">\r
+ if (elDescriptiveConcepts != null) {\r
+ List<Element> listDescriptiveConcepts = elDescriptiveConcepts.getChildren("DescriptiveConcept", sddNamespace);\r
+ int j = 0;\r
+ //for each DescriptiveConcept\r
+ int g = 1;\r
+ for (Element elDescriptiveConcept : listDescriptiveConcepts){\r
+\r
+ String id = elDescriptiveConcept.getAttributeValue("id");\r
+ String uri = elDescriptiveConcept.getAttributeValue("uri");\r
+\r
+ FeatureNode fn = null;\r
+ \r
+ if (!id.equals("")) {\r
+ fn = FeatureNode.NewInstance();\r
+ Feature feature = Feature.NewInstance();\r
+ // <Representation>\r
+ // <Label>Body</Label>\r
+ importRepresentation(elDescriptiveConcept, sddNamespace, feature, id, sddConfig);\r
+ features.put("g" + g, feature);\r
+ g++;\r
+ fn.setFeature(feature);\r
+\r
+ // TODO if an OriginalSource can be attached to a FeatureNode or a Feature \r
+ // OriginalSource source = null;\r
+ // if (uri != null) {\r
+ // if (!uri.equals("")) {\r
+ // source = OriginalSource.NewInstance(id, "DescriptiveConcept", Generic.NewInstance(), uri);\r
+ // }\r
+ // } else {\r
+ // source = OriginalSource.NewInstance(id, "DescriptiveConcept");\r
+ // }\r
+ // fn.addSource(source);\r
+\r
+ featureNodes.put(id,fn);\r
}\r
- }\r
- for (Iterator<StatisticalMeasure> k = statisticalMeasures.iterator() ; k.hasNext() ;) {\r
- StatisticalMeasure sm = k.next();\r
- termService.saveTerm(sm); \r
- }\r
\r
- IReferenceService referenceService = config.getCdmAppController().getReferenceService();\r
+ if ((++j % modCount) == 0){ logger.info("DescriptiveConcepts handled: " + j);}\r
\r
- for (Iterator<ReferenceBase> k = publications.values().iterator() ; k.hasNext() ;){\r
- Article publication = (Article) k.next();\r
- referenceService.saveReference(publication); \r
}\r
+ }\r
+}\r
\r
- // Returns a CdmApplicationController created by the values of this configuration.\r
- IDescriptionService descriptionService = config.getCdmAppController().getDescriptionService();\r
+// imports the descriptions of taxa (specimens TODO)\r
+protected void importCharacterTrees(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
+ // <CharacterTrees>\r
+ logger.info("start CharacterTrees ...");\r
+ Element elCharacterTrees = elDataset.getChild("CharacterTrees",sddNamespace);\r
\r
- for (Iterator<TaxonDescription> k = taxonDescriptions.values().iterator() ; k.hasNext() ;){\r
- TaxonDescription taxonDescription = k.next();\r
- // Persists a Description\r
- descriptionService.saveDescription(taxonDescription); \r
- }\r
+ // <CharacterTree>\r
\r
- config.getCdmAppController().commitTransaction(ts);\r
+ if (elCharacterTrees != null) {\r
+ List<Element> listCharacterTrees = elCharacterTrees.getChildren("CharacterTree", sddNamespace);\r
+ int j = 0;\r
+ //for each CharacterTree\r
\r
- // makeNameSpecificData(nameMap);\r
- logger.info("end makeTaxonDescriptions ...");\r
- return success;\r
+ for (Element elCharacterTree : listCharacterTrees){\r
\r
- }\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
- return false;\r
- }\r
+ try {\r
+ Element elRepresentation = elCharacterTree.getChild("Representation",sddNamespace);\r
+ String label = (String)ImportHelper.getXmlInputValue(elRepresentation,"Label",sddNamespace);\r
+ Element elDesignedFor = elCharacterTree.getChild("DesignedFor",sddNamespace);\r
+ List<Element> listRoles = elDesignedFor.getChildren("Role",sddNamespace);\r
+ boolean isgroups = false;\r
\r
- protected void addCdmBaseWithImage(String refMO, CdmBase cb){\r
- if ((refMO != null) && (cb!=null)) {\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
- } else {\r
- List<CdmBase> lcb = mediaObject_ListCdmBase.get(refMO);\r
- lcb.add(cb);\r
- mediaObject_ListCdmBase.put(refMO,lcb);\r
+ for (Element elRole : listRoles){\r
+ if (elRole.getText().equals("Filtering")) {\r
+ isgroups = true;\r
+ }\r
}\r
+ \r
+ if ((label.contains("group")) || (isgroups)) {\r
+ \r
+ FeatureTree groups = FeatureTree.NewInstance();\r
+ importRepresentation(elCharacterTree, sddNamespace, groups, "", sddConfig);\r
+ FeatureNode root = groups.getRoot();\r
+ \r
+ Element elNodes = elCharacterTree.getChild("Nodes", sddNamespace);\r
+ List<Element> listNodes = elNodes.getChildren("Node", sddNamespace);\r
+ for (Element elNode : listNodes){\r
+ String idN = elNode.getAttributeValue("id");\r
+ FeatureNode fn = null;\r
+ if (!idN.equals("")) {\r
+ Element elDescriptiveConcept = elNode.getChild("DescriptiveConcept", sddNamespace);\r
+ String refDC = elDescriptiveConcept.getAttributeValue("ref");\r
+ fn = featureNodes.get(refDC);\r
+ root.addChild(fn);\r
+ }\r
+ nodes.put(idN, fn);\r
+ }\r
+ \r
+ List<Element> listCharNodes = elNodes.getChildren("CharNode", sddNamespace);\r
+ for (Element elCharNode : listCharNodes){\r
+ Element elParent = elCharNode.getChild("Parent", sddNamespace);\r
+ String refP = elParent.getAttributeValue("ref");\r
+ Element elCharacter = elCharNode.getChild("Character", sddNamespace);\r
+ String refC = elCharacter.getAttributeValue("ref");\r
+ FeatureNode fn = FeatureNode.NewInstance();\r
+ if (!refP.equals("")) {\r
+ FeatureNode parent = nodes.get(refP);\r
+ parent.addChild(fn);\r
+ Feature character = features.get(refC);\r
+ fn.setFeature(character);\r
+ // if method setParent() in FeatureNode becomes visible\r
+ // fn.setParent(parent);\r
+ }\r
+ nodes.put(refC, fn);\r
+ }\r
+ featureTrees.add(groups);\r
+ }\r
+\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Import of Character tree " + j + " failed.");\r
+ success = false; \r
}\r
+\r
+ if ((++j % modCount) == 0){ logger.info("CharacterTrees handled: " + j);}\r
+\r
}\r
- }\r
\r
+ }\r
+}\r
}\r