/**\r
* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
* http://www.e-taxonomy.eu\r
-* \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
import java.util.HashSet;\r
import java.util.Set;\r
import java.util.UUID;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
\r
import org.apache.commons.lang.StringUtils;\r
import org.apache.log4j.Logger;\r
import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.cdm.model.common.OriginalSourceType;\r
-import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
import eu.etaxonomy.cdm.model.description.Feature;\r
import eu.etaxonomy.cdm.model.description.MeasurementUnit;\r
import eu.etaxonomy.cdm.model.description.QuantitativeData;\r
import eu.etaxonomy.cdm.model.description.StatisticalMeasure;\r
import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;\r
import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
-import eu.etaxonomy.cdm.model.location.NamedArea;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.reference.Reference;\r
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
\r
/**\r
* @author a.mueller\r
* @created 16.12.2010\r
- * @version 1.0\r
*/\r
public class CyprusAltitudeActivator {\r
private static final Logger logger = Logger.getLogger(CyprusAltitudeActivator.class);\r
- \r
+\r
//database validation status (create, update, validate ...)\r
static DbSchemaValidation hbm2dll = DbSchemaValidation.VALIDATE;\r
// static final URI source = cyprus_distribution();\r
static final URI source = cyprus_altitude();\r
\r
- \r
-// static final ICdmDataSource cdmDestination = CdmDestinations.localH2();\r
-// static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();\r
- static final ICdmDataSource cdmDestination = CdmDestinations.cdm_cyprus_dev();\r
+\r
+ static final ICdmDataSource cdmDestination = CdmDestinations.localH2();\r
+// static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql_test();\r
+// static final ICdmDataSource cdmDestination = CdmDestinations.cdm_cyprus_dev();\r
// static final ICdmDataSource cdmDestination = CdmDestinations.cdm_cyprus_production();\r
\r
- \r
+\r
//feature tree uuid\r
public static final UUID featureTreeUuid = UUID.fromString("14d1e912-5ec2-4d10-878b-828788b70a87");\r
- \r
+\r
//classification\r
static final UUID classificationUuid = UUID.fromString("0c2b5d25-7b15-4401-8b51-dd4be0ee5cab");\r
- \r
+\r
private static final String sourceReferenceTitle = "Cyprus Excel Altitude Import";\r
- \r
- \r
+\r
+\r
//TODO move to Feature vocabulary\r
- private static final UUID uuidAltitudeFeature = UUID.fromString("1279e8c8-b6e2-4f9f-af41-76acfa7312ed");\r
- \r
+ private static final UUID uuidAltitudeFeature = UUID.fromString("1a28ed59-e15f-4001-b5c2-ea89f0012671");\r
+\r
//check - import\r
static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;\r
- \r
+\r
private void doImport(ICdmDataSource cdmDestination){\r
- \r
- \r
+\r
+\r
ArrayList<HashMap<String, String>> excel;\r
try {\r
excel = ExcelUtils.parseXLS(source, "coreTax");\r
e.printStackTrace();\r
return;\r
}\r
- \r
+\r
CdmApplicationController app = CdmIoApplicationController.NewInstance(cdmDestination, hbm2dll);\r
\r
Set<TaxonBase> taxaToSave = new HashSet<TaxonBase>();\r
- \r
+\r
TransactionStatus tx = app.startTransaction();\r
- \r
+\r
UUID uuidMikle77 = UUID.fromString("9f5fa7ee-538b-4ae5-bd82-2a9503fea1d6");\r
UUID uuidMikle85 = UUID.fromString("994403c4-c400-413d-9a1a-8531a40bfd8c");\r
- \r
- Reference<?> mikle77 = app.getReferenceService().find(uuidMikle77);\r
- Reference<?> mikle85 = app.getReferenceService().find(uuidMikle85);\r
- \r
- \r
- TermVocabulary<Feature> featureVoc = null;\r
+\r
+ Reference mikle77 = app.getReferenceService().find(uuidMikle77);\r
+ Reference mikle85 = app.getReferenceService().find(uuidMikle85);\r
+\r
+\r
Feature altitudeFeature = (Feature) app.getTermService().find(uuidAltitudeFeature);\r
if (altitudeFeature == null){\r
- altitudeFeature = Feature.NewInstance("Altitude", "Altitude", "alt.");\r
- altitudeFeature.setUuid(uuidAltitudeFeature);\r
- featureVoc = app.getVocabularyService().find(UUID.fromString("b187d555-f06f-4d65-9e53-da7c93f8eaa8"));\r
- featureVoc.addTerm(altitudeFeature);\r
+// altitudeFeature = Feature.NewInstance("Altitude", "Altitude", "alt.");\r
+// altitudeFeature.setUuid(uuidAltitudeFeature);\r
+// featureVoc = app.getVocabularyService().find(UUID.fromString("b187d555-f06f-4d65-9e53-da7c93f8eaa8"));\r
+// featureVoc.addTerm(altitudeFeature);\r
+ throw new RuntimeException("Could not find altitudinal range feature");\r
}\r
- \r
+\r
MeasurementUnit meter = (MeasurementUnit)app.getTermService().find(UUID.fromString("8bef5055-789c-41e5-bea2-8dc2ea8ecdf6"));\r
// NamedArea cyprus = (NamedArea)app.getTermService().find(UUID.fromString("da4cce9a-439b-4cc4-8073-85dc75bae169"));\r
- \r
+\r
int count =1;\r
for (HashMap<String, String> row : excel){\r
count++;\r
UUID baseUuid = makeUuid(row, "uuid");\r
UUID acceptedUuid = makeUuid(row, "acceptedNameUuid");\r
UUID parentUuid = makeUuid(row, "parentUuid");\r
- \r
- String altitude = row.get("Altitude-kumuliert");\r
+\r
+// String altitude = row.get("Altitude-kumuliert");\r
+\r
+ String altitudeMin = row.get("Min");\r
+ String altitudeMax = row.get("Max");\r
+ String acceptedName = row.get("AcceptedName");\r
+\r
+\r
+\r
String source = row.get("Source");\r
- \r
- if (StringUtils.isBlank(altitude)){\r
+\r
+ if (StringUtils.isBlank(altitudeMin)){\r
continue;\r
}\r
- \r
+\r
boolean hasAltitude = false;\r
- Reference<?> sourceRef = getSource(source, mikle77, mikle85);\r
- Taxon taxon = getTaxon(app, baseUuid, acceptedUuid, parentUuid, count);\r
+ Reference sourceRef = getSource(source, mikle77, mikle85);\r
+ Taxon taxon = getTaxon(app, baseUuid, acceptedUuid, parentUuid, acceptedName, count);\r
if (taxon != null){\r
TaxonDescription desc = getDescription(taxon, sourceRef);\r
- \r
- \r
- hasAltitude = makeAltitude(altitude, altitudeFeature, sourceRef, desc, meter, count);\r
+\r
+ hasAltitude = makeAltitude(altitudeMin, altitudeMax, altitudeFeature, sourceRef, desc, meter, count);\r
+// hasAltitude = makeAltitudeOld(altitude, altitudeFeature, sourceRef, desc, meter, count);\r
if (hasAltitude){\r
if(desc.getTaxon() == null){\r
taxon.addDescription(desc);\r
}\r
taxaToSave.add(taxon);\r
+ }else{\r
+ logger.warn("HasALtitude is false in " + count);\r
}\r
}else{\r
logger.warn("Taxon not recognized in line " + count);\r
}\r
}\r
\r
- if (featureVoc != null){\r
- app.getVocabularyService().saveOrUpdate(featureVoc);\r
- }\r
app.getTaxonService().saveOrUpdate(taxaToSave);\r
- \r
+\r
// tx.setRollbackOnly();\r
app.commitTransaction(tx);\r
}\r
\r
- private Taxon getTaxon(CdmApplicationController app, UUID baseUuid, UUID acceptedUuid, UUID parentUuid, int row) {\r
+\r
+ private Taxon getTaxon(CdmApplicationController app, UUID baseUuid, UUID acceptedUuid, UUID parentUuid, String acceptedName, int row) {\r
TaxonBase<?> base = app.getTaxonService().find(baseUuid);\r
// TaxonBase<?> parent = app.getTaxonService().find(parentUuid);\r
- \r
+\r
//TODO\r
Taxon result = null;\r
if (base.isInstanceOf(Taxon.class)){\r
}else{\r
logger.warn("Synonym relation has changed somehow. Row: " + row + ", Taxon: " + base.getTitleCache());\r
}\r
- \r
+\r
}else{\r
logger.warn("Accepted taxon not in classification. Row: " + row + ", Taxon: " + base.getTitleCache());\r
}\r
}\r
- \r
+\r
+ if (result != null){\r
+ if (! result.getName().getTitleCache().equals(acceptedName)){\r
+ logger.warn("AcceptedName and taxon name is not equal in " + row + ".\n" +\r
+ " Accepted Name: " + acceptedName + ";\n" +\r
+ " Taxon Name: " + result.getName().getTitleCache());\r
+ }\r
+ }\r
+\r
return result;\r
}\r
\r
private boolean hasSynonym(Taxon t, TaxonBase<?> base) {\r
if (base.isInstanceOf(Synonym.class)){\r
- for (SynonymRelationship rel : t.getSynonymRelations()){\r
- if (rel.getSynonym().equals(base)){\r
+ for (Synonym syn : t.getSynonyms()){\r
+ if (syn.equals(base)){\r
return true;\r
}\r
}\r
return false;\r
}\r
\r
- private static final Pattern altitudePattern = Pattern.compile("\\d{1,4}(-\\d{1,4})?");\r
-\r
-\r
- \r
- private boolean makeAltitude(String altitudeOrig, Feature feature, Reference<?> source, TaxonDescription desc, MeasurementUnit meter, int row) {\r
- String altitude = altitudeOrig.trim().replace(" ", "");\r
- Matcher matcher = altitudePattern.matcher(altitude);\r
- \r
- if (matcher.matches()){\r
- QuantitativeData data = QuantitativeData.NewInstance(feature);\r
- \r
- //Meikle\r
- if (source != null){\r
- TaxonNameBase<?,?> nameUsedInSource = null; //TODO\r
- data.addSource(OriginalSourceType.PrimaryTaxonomicSource, null, null, source, null, nameUsedInSource, null);\r
- }\r
- //Excel\r
- TaxonNameBase<?,?> nameUsedInSource = null; //TODO probably we don't want this\r
- data.addSource(OriginalSourceType.Import, null, null, getSourceReference(), null, nameUsedInSource, null);\r
- data.setUnit(meter);\r
- \r
- String[] split = altitude.split("-");\r
-\r
- Integer min = Integer.valueOf(split[0]);\r
- StatisticalMeasurementValue minValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MIN(), min);\r
- data.addStatisticalValue(minValue);\r
-\r
- if (split.length > 1){\r
- Integer max = Integer.valueOf(split[1]);\r
- StatisticalMeasurementValue maxValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MAX(), max);\r
- data.addStatisticalValue(maxValue);\r
- }\r
- desc.addElement(data);\r
- return true;\r
- }else{\r
- logger.warn("Altitude does not match in row " + row + ": " + altitudeOrig);\r
- return false;\r
+// private static final Pattern altitudePattern = Pattern.compile("\\d{1,4}(-\\d{1,4})?");\r
+\r
+\r
+ private boolean makeAltitude(String altitudeMin, String altitudeMax, Feature altitudeFeature,\r
+ Reference sourceRef, TaxonDescription desc, MeasurementUnit meter, int row) {\r
+\r
+ QuantitativeData data = QuantitativeData.NewInstance(altitudeFeature);\r
+\r
+ //Meikle\r
+ if (source != null){\r
+ TaxonNameBase<?,?> nameUsedInSource = null; //TODO\r
+ data.addSource(OriginalSourceType.PrimaryTaxonomicSource, null, null, sourceRef, null, nameUsedInSource, null);\r
}\r
+// //Excel //excel source not wanted by Ralf\r
+// TaxonNameBase<?,?> nameUsedInSource = null; //TODO probably we don't want this\r
+// data.addSource(OriginalSourceType.Import, String.valueOf(row), "row", getSourceReference(), null, nameUsedInSource, null);\r
+\r
+ data.setUnit(meter);\r
+\r
+ Integer min = Integer.valueOf(altitudeMin);\r
+ StatisticalMeasurementValue minValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MIN(), min);\r
+ data.addStatisticalValue(minValue);\r
+\r
+ Integer max = Integer.valueOf(altitudeMax);\r
+ StatisticalMeasurementValue maxValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MAX(), max);\r
+ data.addStatisticalValue(maxValue);\r
+\r
+ desc.addElement(data);\r
+ return true;\r
}\r
\r
- private TaxonDescription getDescription(Taxon taxon, Reference<?> sourceRef) {\r
+// private boolean makeAltitudeOld(String altitudeOrig, Feature feature, Reference source, TaxonDescription desc, MeasurementUnit meter, int row) {\r
+// String altitude = altitudeOrig.trim().replace(" ", "");\r
+// Matcher matcher = altitudePattern.matcher(altitude);\r
+//\r
+// if (matcher.matches()){\r
+// QuantitativeData data = QuantitativeData.NewInstance(feature);\r
+//\r
+// //Meikle\r
+// if (source != null){\r
+// TaxonNameBase<?,?> nameUsedInSource = null; //TODO\r
+// data.addSource(OriginalSourceType.PrimaryTaxonomicSource, null, null, source, null, nameUsedInSource, null);\r
+// }\r
+// //Excel\r
+// TaxonNameBase<?,?> nameUsedInSource = null; //TODO probably we don't want this\r
+// data.addSource(OriginalSourceType.Import, String.valueOf(row), "row", getSourceReference(), null, nameUsedInSource, null);\r
+// data.setUnit(meter);\r
+//\r
+// String[] split = altitude.split("-");\r
+//\r
+// Integer min = Integer.valueOf(split[0]);\r
+// StatisticalMeasurementValue minValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MIN(), min);\r
+// data.addStatisticalValue(minValue);\r
+//\r
+// if (split.length > 1){\r
+// Integer max = Integer.valueOf(split[1]);\r
+// StatisticalMeasurementValue maxValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MAX(), max);\r
+// data.addStatisticalValue(maxValue);\r
+// }\r
+// desc.addElement(data);\r
+// return true;\r
+// }else{\r
+// logger.warn("Altitude does not match in row " + row + ": " + altitudeOrig);\r
+// return false;\r
+// }\r
+// }\r
+\r
+ private TaxonDescription getDescription(Taxon taxon, Reference sourceRef) {\r
if (taxon != null){\r
//TODO Mikle existiert derzeit nicht also Source\r
- \r
+\r
TaxonDescription desc = TaxonDescription.NewInstance();\r
desc.setTitleCache("Import from " + getSourceReference().getTitleCache(), true);\r
desc.addSource(OriginalSourceType.PrimaryTaxonomicSource, null, null, sourceRef,null);\r
desc.addSource(OriginalSourceType.Import, null, null, getSourceReference(), null);\r
- \r
+\r
return desc;\r
}\r
return null;\r
}\r
\r
- private Reference<?> getSource(String source, Reference<?> m77, Reference<?> m85) {\r
+ private Reference getSource(String source, Reference m77, Reference m85) {\r
if(StringUtils.isNotBlank(source)){\r
if (source.equals("Meikle 1977")){\r
return m77;\r
// // TODO Auto-generated method stub\r
// HashMap<String, Object> = new HashM\r
// row\r
-// \r
-// \r
+//\r
+//\r
// }\r
\r
- \r
- Reference<?> sourceReference;\r
- private Reference<?> getSourceReference() {\r
+\r
+ Reference sourceReference;\r
+ private Reference getSourceReference() {\r
if (sourceReference == null){\r
sourceReference = ReferenceFactory.newGeneric();\r
sourceReference.setTitleCache(sourceReferenceTitle, true);\r
- \r
+\r
}\r
return sourceReference;\r
- \r
+\r
}\r
\r
\r
public static URI cyprus_altitude() {\r
URI sourceUrl;\r
try {\r
- sourceUrl = new URI("file:/F:/data/cyprus/Zypern-Altitude.xls");\r
+ sourceUrl = new URI("file:/F:/data/cyprus/Cyprus-altitude-import-neu.xls");\r
+// sourceUrl = new URI("file:/F:/data/cyprus/Zypern-Altitude.xls");\r
return sourceUrl;\r
} catch (URISyntaxException e) {\r
e.printStackTrace();\r
\r
private void testMatcher() {\r
// makeAltitude("0-4400", null, null);\r
- \r
+\r
}\r
- \r
+\r
}\r