import java.sql.Date;\r
import java.sql.ResultSet;\r
import java.sql.SQLException;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
import java.util.Set;\r
import java.util.UUID;\r
\r
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
import eu.etaxonomy.cdm.model.common.Annotation;\r
import eu.etaxonomy.cdm.model.common.AnnotationType;\r
+import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
import eu.etaxonomy.cdm.model.common.Language;\r
import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
import eu.etaxonomy.cdm.model.common.TermType;\r
+import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
import eu.etaxonomy.cdm.model.common.TimePeriod;\r
import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
import eu.etaxonomy.cdm.model.description.Feature;\r
addOriginalSource(stateTerm, id.toString(), "EcoLifeForm", state.getTransactionalSourceReference());\r
getTermService().saveOrUpdate(stateTerm);\r
}\r
+ \r
+ //material category\r
+ TermVocabulary<DefinedTerm> materialCategoryVoc = getVocabulary(TermType.KindOfUnit, AlgaTerraImportTransformer.uuidKindOfUnitVoc, "Alga Terra Material Category", "Alga Terra Material Category", abbrevLabel, uri, false, DefinedTerm.NewKindOfUnitInstance(null, null, null));\r
+ getVocabularyService().save(materialCategoryVoc);\r
+ \r
+ String materialSql = "SELECT * FROM MaterialCategory WHERE MaterialCategoryId <> 16 ";\r
+ rs = source.getResultSet(materialSql);\r
+ while (rs.next()){\r
+ Integer id = rs.getInt("MaterialCategoryId");\r
+ String category = rs.getString("MaterialCategory");\r
+ String description = rs.getString("Description");\r
+ UUID uuid = UUID.randomUUID();\r
+ \r
+ DefinedTerm kindOfUnit = DefinedTerm.NewKindOfUnitInstance(description, category, null);\r
+ kindOfUnit.setUuid(uuid);\r
+ addOriginalSource(kindOfUnit, id.toString(), "MaterialCategory", state.getTransactionalSourceReference());\r
+ materialCategoryVoc.addTerm(kindOfUnit);\r
+ getTermService().saveOrUpdate(kindOfUnit);\r
+ materialCategoryMapping.put(id, uuid);\r
+ }\r
\r
//areas\r
OrderedTermVocabulary<NamedArea> informalAreasVoc = (OrderedTermVocabulary<NamedArea>)getVocabulary(TermType.NamedArea, AlgaTerraImportTransformer.uuidNamedAreaVocAlgaTerraInformalAreas, "AlgaTerra Specific Areas", "AlgaTerra Specific Areas", abbrevLabel, uri, true, NamedArea.NewInstance());\r
String gazetteer = rs.getString("Gazetteer");\r
Integer id = rs.getInt("ID");\r
String notes = rs.getString("Notes");\r
+ //TODO stable uuids\r
// UUID uuid = UUID.fromString(rs.getString("UUID"));\r
+ UUID uuid = UUID.randomUUID();\r
+ subL4Mapping.put(id, uuid);\r
\r
String tdwgCode = (l4Code != null) ? l4Code : (l3Code != null) ? l3Code : (l2Code != null) ? l2Code : l1Code;\r
\r
NamedArea tdwgArea = TdwgAreaProvider.getAreaByTdwgAbbreviation(tdwgCode);\r
- NamedArea newArea = getNamedArea(state, AlgaTerraImportTransformer.uuidNamedAreaPatagonia,gazetteer, gazetteer, null, null, null, informalAreasVoc, TermMatchMode.UUID_ONLY, null);\r
+ NamedArea newArea = getNamedArea(state, uuid ,gazetteer, gazetteer, null, null, null, informalAreasVoc, TermMatchMode.UUID_ONLY, null);\r
if (isNotBlank(notes)){\r
newArea.addAnnotation(Annotation.NewInstance(notes, AnnotationType.EDITORIAL(), Language.DEFAULT()));\r
}\r
} \r
}\r
\r
+ //tmp\r
+ static Map<Integer, UUID> subL4Mapping = new HashMap<Integer, UUID>();\r
+ static Map<Integer, UUID> materialCategoryMapping = new HashMap<Integer, UUID>();\r
+ \r
protected String getLocalityString(){\r
return "Locality";\r
}\r
makeAreas(state, rs, facade);\r
\r
//notes\r
- //TODO is this an annotation on field observation or on the derived unit?\r
+ //=> not required according to Henning\r
\r
//id, created, updated, notes\r
if (unitId != null){\r
protected void handleFirstDerivedSpecimen(ResultSet rs, DerivedUnitFacade facade, AlgaTerraImportState state, ResultSetPartitioner partitioner) throws SQLException {\r
Integer unitId = nullSafeInt(rs, "unitId");\r
Integer collectionFk = nullSafeInt(rs,"CollectionFk");\r
+ String label = rs.getString("Label"); \r
\r
//collection\r
if (collectionFk != null){\r
facade.setCollection(subCollection);\r
}else{\r
Collection collection = state.getRelatedObject(AlgaTerraCollectionImport.NAMESPACE_COLLECTION, String.valueOf(collectionFk), Collection.class);\r
+ if (collection == null){\r
+ logger.warn("Collection for collectionFK " + collectionFk + " can not be found.");\r
+ }\r
facade.setCollection(collection);\r
}\r
}\r
\r
+ //Label\r
+ if (isNotBlank(label)){\r
+ //TODO implement label #4218, #3090, #3084\r
+ logger.warn("Label not yet implemented for specimen, #4218, #3090, #3084");\r
+ }\r
+ \r
//TODO id, created for fact + ecoFact\r
// this.doIdCreatedUpdatedNotes(state, descriptionElement, rs, id, namespace);\r
if (unitId != null){\r
if (isNotBlank(tdwg3)){\r
tdwgArea = TdwgAreaProvider.getAreaByTdwgAbbreviation(tdwg3);\r
}else{\r
- Integer tdwg2 = rs.getInt("L2Code"); \r
- tdwgArea = TdwgAreaProvider.getAreaByTdwgAbbreviation(String.valueOf(tdwg2));\r
+ Number tdwg2D = nullSafeDouble(rs, "L2Code"); \r
+ if (tdwg2D != null){\r
+ Integer tdwg2 = tdwg2D.intValue();\r
+ tdwgArea = TdwgAreaProvider.getAreaByTdwgAbbreviation(String.valueOf(tdwg2));\r
+ }else{\r
+ Number tdwg1D = nullSafeDouble(rs, "L1Code"); \r
+ if (tdwg1D != null){\r
+ Integer tdwg1 = tdwg1D.intValue();\r
+ tdwgArea = TdwgAreaProvider.getAreaByTdwgAbbreviation(String.valueOf(tdwg1));\r
+ }else{\r
+ tdwgArea = null;\r
+ }\r
+ }\r
}\r
}\r
if (tdwgArea == null){\r
}else{\r
\r
}\r
- if (country == null){\r
- boolean hasInformalArea = handleMissingCountry(state, facade, gazetteerId);\r
- if (hasInformalArea == false){\r
- logger.warn("Country does not exist for GazetteerID " + gazetteerId);\r
+ \r
+ NamedArea subL4Area = null;\r
+ Boolean subL4 = nullSafeBoolean(rs, "subL4");\r
+ if (subL4 != null && subL4.booleanValue() == true){\r
+ subL4Area = makeSubL4Area(state, gazetteerId);\r
+ if (subL4Area != null){\r
+ facade.addCollectingArea(subL4Area);\r
+ }else{\r
+ logger.warn("SubL4 area not found for gazetteerId: " + gazetteerId);\r
+ }\r
+ }\r
+ \r
+ if (country == null ){\r
+ if (! gazetteerId.equals(40)){//special handling for Borneo, TDWG area is enough here as it matches exactly\r
+ if (subL4Area == null ){\r
+ logger.warn("Country does not exist and SubL4 could not be found for GazetteerID " + gazetteerId);\r
+ }else { \r
+ logger.info("Country could not be defined but subL4 area was added");\r
+ }\r
}\r
}else{\r
facade.setCountry(country);\r
if (isNotBlank(waterbodyStr)){\r
if (waterbodyStr.equals("Atlantic Ocean")){\r
waterbody = NamedArea.ATLANTICOCEAN();\r
+ }else if (waterbodyStr.equals("Pacific Ocean")){\r
+ waterbody = NamedArea.PACIFICOCEAN();\r
+ }else if (waterbodyStr.equals("Indian Ocean")){\r
+ waterbody = NamedArea.INDIANOCEAN();\r
+ }else if (waterbodyStr.equals("Arctic Ocean")){\r
+ waterbody = NamedArea.ARCTICOCEAN();\r
}else{\r
logger.warn("Waterbody not recognized: " + waterbody);\r
}\r
}\r
\r
\r
+ private NamedArea makeSubL4Area(AlgaTerraImportState state, Integer gazetteerId) {\r
+ UUID uuid = subL4Mapping.get(gazetteerId);\r
+ NamedArea area = (NamedArea)getTermService().find(uuid);\r
+ if (area == null){\r
+ logger.warn("SubL4 area could not be found in repository");\r
+ }\r
+ return area;\r
+ }\r
+\r
private boolean handleMissingCountry(AlgaTerraImportState state, DerivedUnitFacade facade, Integer gazetteerId) {\r
NamedArea area = null;\r
if (gazetteerId != null){\r