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
* @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
//for each Dataset\r
logger.info("start Dataset ...");\r
for (Element elDataset : elDatasets){\r
- importDataset(elDataset, sddNamespace, success, sddConfig); \r
+ success &= importDataset(elDataset, sddNamespace, state); \r
if ((++i % modCount) == 0){ logger.info("Datasets handled: " + i);}\r
logger.info(i + " Datasets handled");\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
-\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
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
+ 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
logger.info("end of persistence ...");\r
\r
- \r
+ return success;\r
}\r
\r
private void saveAnnotationType() {\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
+ success &= handleCategoricalData(sddNamespace, sddConfig, elCharacters);\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 &= handleQuantitativeData(sddNamespace, sddConfig, elCharacters);\r
\r
- // <States>\r
- Element elStates = elCategoricalCharacter.getChild("States",sddNamespace);\r
+ success &= handleTextCharacters(sddNamespace, sddConfig, elCharacters);\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
+ /*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
- String idS = elStateDefinition.getAttributeValue("id");\r
- State state = State.NewInstance();\r
- importRepresentation(elStateDefinition, sddNamespace, state, idS, sddConfig);\r
+ }\r
\r
- //StateData stateData = StateData.NewInstance();\r
- //stateData.setState(state);\r
- termVocabularyState.addTerm(state);\r
- states.put(idS,state);\r
- }\r
- categoricalCharacter.addSupportedCategoricalEnumeration(termVocabularyState);\r
- features.put(idCC, categoricalCharacter);\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 = new TermVocabulary<State>();\r
+ int k = 0;\r
+ //for each StateDefinition\r
+ for (Element elStateDefinition : elStateDefinitions){\r
\r
- } catch (Exception e) {\r
- logger.warn("Import of CategoricalCharacter " + j + " failed.");\r
- success = false; \r
- }\r
+ if ((++k % modCount) == 0){ logger.info("StateDefinitions handled: " + (k-1));}\r
\r
- if ((++j % modCount) == 0){ logger.info("CategoricalCharacters handled: " + j);}\r
+ String idS = elStateDefinition.getAttributeValue("id");\r
+ State state = State.NewInstance();\r
+ importRepresentation(elStateDefinition, sddNamespace, state, idS, sddConfig);\r
\r
+ //StateData stateData = StateData.NewInstance();\r
+ //stateData.setState(state);\r
+ termVocabularyState.addTerm(state);\r
+ states.put(idS,state);\r
+ }\r
+ categoricalCharacter.addSupportedCategoricalEnumeration(termVocabularyState);\r
+ features.put(idCC, categoricalCharacter);\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
+ * @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
- // <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
+ try {\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
+ String idQC = elQuantitativeCharacter.getAttributeValue("id");\r
\r
- if (unit != null) {\r
- units.put(idQC, unit);\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
- //<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
+ 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