Project

General

Profile

« Previous | Next » 

Revision d9f92b40

Added by Andreas Müller over 4 years ago

ref #8509, ref #8508 some fixes to E+M PESI export and validation

View differences:

cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/out/PesiTaxonExport.java
26 26

  
27 27
import org.apache.commons.lang.StringUtils;
28 28
import org.apache.log4j.Logger;
29
import org.joda.time.DateTime;
30
import org.joda.time.format.DateTimeFormat;
31
import org.joda.time.format.DateTimeFormatter;
32 29
import org.springframework.stereotype.Component;
33 30
import org.springframework.transaction.TransactionStatus;
34 31

  
......
37 34
import eu.etaxonomy.cdm.io.common.Source;
38 35
import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
39 36
import eu.etaxonomy.cdm.io.common.mapping.out.DbConstantMapper;
40
import eu.etaxonomy.cdm.io.common.mapping.out.DbExtensionMapper;
41 37
import eu.etaxonomy.cdm.io.common.mapping.out.DbLastActionMapper;
42 38
import eu.etaxonomy.cdm.io.common.mapping.out.DbObjectMapper;
43 39
import eu.etaxonomy.cdm.io.common.mapping.out.DbStringMapper;
......
172 168
			success &= doPhase01(state, mapping, additionalSourceMapping);
173 169

  
174 170
			//"PHASE 1b: Handle names without taxa ...
175
			success &= doNames(state, additionalSourceMapping);
171
			success &= doPhase01b_Names(state, additionalSourceMapping);
176 172

  
177 173
			// 2nd Round: Add ParentTaxonFk to each taxon
178 174
			success &= doPhase02(state);
......
881 877
		return inferredSynonymsDataToBeSaved;
882 878
	}
883 879

  
884

  
885 880
	/**
886 881
	 * Handles names that do not appear in taxa
887 882
	 * @param state
888 883
	 * @param mapping
889 884
	 */
890
	private boolean doNames(PesiExportState state, PesiExportMapping additionalSourceMapping)  throws SQLException {
885
	private boolean doPhase01b_Names(PesiExportState state, PesiExportMapping additionalSourceMapping) {
891 886

  
892 887
		boolean success = true;
893 888
		if (! state.getConfig().isDoPureNames()){
......
1399 1394
			    //TODO define for FE + IF and for multiple sources
1400 1395
			    result = cacheStrategy.getFullTitleCache(taxonName, tagRules);
1401 1396
			}
1402
			return result.replaceAll(",?\\<@status@\\>.*\\</@status@\\>", "");
1397
			return result.replaceAll("(, ?)?\\<@status@\\>.*\\</@status@\\>", "").trim();
1403 1398
		}
1404 1399
	}
1405 1400

  
......
1599 1594
		Integer result = null;
1600 1595

  
1601 1596
		try {
1602
			if (isMisappliedName(taxon)) {
1603
				Synonym synonym = Synonym.NewInstance(null, null);
1604

  
1605
				// This works as long as only the instance is important to differentiate between TaxonStatus.
1606
				result = PesiTransformer.taxonBase2statusFk(synonym); // Auct References are treated as Synonyms in Datawarehouse now.
1607
			} else {
1597
//			if (isMisappliedName(taxon)) {
1598
//				Synonym synonym = Synonym.NewInstance(null, null);
1599
//
1600
//				// This works as long as only the instance is important to differentiate between TaxonStatus.
1601
//				result = PesiTransformer.taxonBase2statusFk(synonym); // Auct References are treated as Synonyms in datawarehouse now.
1602
//			} else {
1603
		    //this should work now, the method itself distinguishes MAN etc.
1608 1604
				result = PesiTransformer.taxonBase2statusFk(taxon);
1609
			}
1605
//			}
1610 1606
		} catch (Exception e) {
1611 1607
			e.printStackTrace();
1612 1608
		}
......
2019 2015
	 * @return The <code>OriginalDB</code> attribute.
2020 2016
	 * @see MethodMapper
2021 2017
	 */
2022
	@SuppressWarnings("unused")
2018
//	@SuppressWarnings("unused")
2023 2019
	private static String getOriginalDB(IdentifiableEntity<?> identifiableEntity) {
2024 2020
		EnumSet<PesiSource> sources  = getSources(identifiableEntity);
2025 2021
		return PesiTransformer.getOriginalDbBySources(sources);
2026 2022
	}
2027 2023

  
2028
	/**
2029
	 * Returns the <code>LastAction</code> attribute.
2030
	 * @param taxonName The {@link TaxonNameBase TaxonName}.
2031
	 * @return The <code>LastAction</code> attribute.
2032
	 * @see MethodMapper
2033
	 */
2034
	//TODO still in use?
2035
	private static String getLastAction(IdentifiableEntity<?> identEntity) {
2036
		String result = null;
2037
		try {
2038
    		Set<Extension> extensions = identEntity.getExtensions();
2039
    		for (Extension extension : extensions) {
2040
    			if (extension.getType().equals(lastActionExtensionType)) {
2041
    				result = extension.getValue();
2042
    			}
2043
    		}
2044
		} catch (Exception e) {
2045
			e.printStackTrace();
2046
		}
2047
		return result;
2048
	}
2049

  
2050
	/**
2051
	 * Returns the <code>LastActionDate</code> attribute.
2052
	 * @param taxonName The {@link TaxonNameBase TaxonName}.
2053
	 * @return The <code>LastActionDate</code> attribute.
2054
	 * @see MethodMapper
2055
	 */
2056
	//TODO still in use?
2057
	private static DateTime getLastActionDate(IdentifiableEntity<?> identEntity) {
2058
		DateTime result = null;
2059
		try {
2060
			Set<Extension> extensions = identEntity.getExtensions();
2061
			for (Extension extension : extensions) {
2062
				if (extension.getType().equals(lastActionDateExtensionType)) {
2063
					String dateTime = extension.getValue();
2064
					if (dateTime != null) {
2065
						DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
2066
						result = formatter.parseDateTime(dateTime);
2067
					}
2068
				}
2069
			}
2070
		} catch (Exception e) {
2071
			e.printStackTrace();
2072
		}
2073
		return result;
2074
	}
2075

  
2076 2024
	/**
2077 2025
	 * Returns the <code>ExpertName</code> attribute.
2078 2026
	 * @param taxonName The {@link TaxonNameBase TaxonName}.
......
2080 2028
	 * @see MethodMapper
2081 2029
	 */
2082 2030
	@SuppressWarnings("unused")  //for some reason it is also called by getCacheCitation
2083
	private static String getExpertName(TaxonBase<?> taxonName) {
2084
	    String result = null;
2031
	private static String getExpertName(TaxonBase<?> taxon) {
2085 2032
		try {
2033
		    String result = null;
2086 2034
    		if(expertNameExtensionType!=null){  //some databases do not have this extension type
2087
    		    Set<Extension> extensions = taxonName.getExtensions();
2035
    		    Set<Extension> extensions = taxon.getExtensions();
2088 2036
    		    for (Extension extension : extensions) {
2089 2037
    		        if (extension.getType().equals(expertNameExtensionType)) {
2090 2038
    		            result = extension.getValue();
2091 2039
    		        }
2092 2040
    		    }
2093 2041
    		}
2042
    		if (getPesiSources(taxon).contains(PesiSource.EM)){
2043
                return taxon.getSec().getTitleCache();
2044
            }
2045
            return null;
2094 2046
		} catch (Exception e) {
2095 2047
			e.printStackTrace();
2048
			return null;
2096 2049
		}
2097
		return result;
2098 2050
	}
2099 2051

  
2100
	/**
2101
	 * Returns the <code>ExpertFk</code> attribute.
2102
	 * @param taxonName The {@link TaxonNameBase TaxonName}.
2103
	 * @param state The {@link PesiExportState PesiExportState}.
2104
	 * @return The <code>ExpertFk</code> attribute.
2105
	 * @see MethodMapper
2106
	 */
2052
	//TODO change to ExpertGUID
2107 2053
	private static Integer getExpertFk(Reference reference, PesiExportState state) {
2108 2054
		Integer result = state.getDbId(reference);
2109 2055
		return result;
......
2115 2061
	 * @return The <code>SpeciesExpertName</code> attribute.
2116 2062
	 * @see MethodMapper
2117 2063
	 */
2118
	//TODO still in use?
2119
	private static String getSpeciesExpertName(TaxonBase<?> taxonName) {
2120
		String result = null;
2064
	@SuppressWarnings("unused")
2065
	private static String getSpeciesExpertName(TaxonBase<?> taxon) {
2121 2066
		try {
2122
    		Set<Extension> extensions = taxonName.getExtensions();
2123
    		for (Extension extension : extensions) {
2124
    			if (extension.getType().equals(speciesExpertNameExtensionType)) {
2125
    				result = extension.getValue();
2126
    			}
2067
    		Set<Extension> extensions = taxon.getExtensions();
2068
    		if(speciesExpertNameExtensionType!=null){  //some databases do not have this extension type
2069
                for (Extension extension : extensions) {
2070
        			if (extension.getType().equals(speciesExpertNameExtensionType)) {
2071
        				return extension.getValue();
2072
        			}
2073
        		}
2127 2074
    		}
2075
    		if (getPesiSources(taxon).contains(PesiSource.EM)){
2076
    		    return taxon.getSec().getTitleCache();
2077
            }
2078
    		return null;
2128 2079
		} catch (Exception e) {
2129 2080
			e.printStackTrace();
2081
			return null;
2130 2082
		}
2131
		return result;
2132 2083
	}
2133 2084

  
2134 2085
	/**
......
2138 2089
	 * @return The <code>SpeciesExpertFk</code> attribute.
2139 2090
	 * @see MethodMapper
2140 2091
	 */
2092
	//TODO should be changed to SpeciesExpertGUID
2141 2093
	private static Integer getSpeciesExpertFk(Reference reference, PesiExportState state) {
2142 2094
		Integer result = state.getDbId(reference);
2143 2095
		return result;
......
2219 2171
		mapping.addMapper(DbLastActionMapper.NewInstance("LastAction", true));
2220 2172

  
2221 2173
		//experts
2222
		ExtensionType extensionTypeSpeciesExpertName = (ExtensionType)getTermService().find(PesiTransformer.uuidExtSpeciesExpertName);
2223
		mapping.addMapper(DbExtensionMapper.NewInstance(extensionTypeSpeciesExpertName, "SpeciesExpertName"));
2224
		ExtensionType extensionTypeExpertName = (ExtensionType)getTermService().find(PesiTransformer.uuidExtExpertName);
2225
		mapping.addMapper(DbExtensionMapper.NewInstance(extensionTypeExpertName, "ExpertName"));
2174
//		mapping.addMapper(DbExtensionMapper.NewInstance(extensionTypeSpeciesExpertName, "SpeciesExpertName"));
2175
		mapping.addMapper(MethodMapper.NewInstance("SpeciesExpertName", this, TaxonBase.class));
2176
//		ExtensionType extensionTypeExpertName = (ExtensionType)getTermService().find(PesiTransformer.uuidExtExpertName);
2177
//		mapping.addMapper(DbExtensionMapper.NewInstance(extensionTypeExpertName, "ExpertName"));
2178
		mapping.addMapper(MethodMapper.NewInstance("ExpertName", this, TaxonBase.class));
2226 2179

  
2227 2180
		//ParentTaxonFk handled in Phase02 now
2228 2181
		mapping.addMapper(ObjectChangeMapper.NewInstance(TaxonBase.class, TaxonName.class, "Name"));
......
2259 2212
		mapping.addMapper(DbLastActionMapper.NewInstance("LastAction", true));
2260 2213

  
2261 2214
		addNameMappers(mapping);
2262
		//TODO add author mapper
2263

  
2264 2215
		return mapping;
2265 2216
	}
2266 2217

  

Also available in: Unified diff