Project

General

Profile

« Previous | Next » 

Revision 02bf7c25

Added by Andreas Müller over 4 years ago

ref #2826 fix IF subspecies import, link to genus if species not exists

View differences:

cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/indexFungorum/IndexFungorumImportState.java
9 9

  
10 10
package eu.etaxonomy.cdm.io.pesi.indexFungorum;
11 11

  
12
import java.util.ArrayList;
13 12
import java.util.HashMap;
14
import java.util.List;
15 13
import java.util.Map;
16 14
import java.util.UUID;
17 15

  
......
36 34

  
37 35
	private Map<String, TaxonBase> speciesMap;
38 36

  
39
	private List<UUID> infraspecificTaxaUUIDs = new ArrayList<>();
37
	private Map<UUID,Integer> infraspecificTaxaUUIDs = new HashMap<>();
40 38

  
41 39

  
42 40

  
......
49 47
//		super(config);
50 48
	}
51 49

  
52
    public List<UUID> getInfraspecificTaxaUUIDs() {
50
    public Map<UUID,Integer> getInfraspecificTaxaUUIDs() {
53 51
        return infraspecificTaxaUUIDs;
54 52
    }
55
    public void setInfraspecificTaxaUUIDs(List<UUID> infraspecificTaxaUUIDs) {
53
    public void setInfraspecificTaxaUUIDs(Map<UUID, Integer> infraspecificTaxaUUIDs) {
56 54
        this.infraspecificTaxaUUIDs = infraspecificTaxaUUIDs;
57 55
    }
58 56

  
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/indexFungorum/IndexFungorumSpeciesImport.java
15 15
import java.util.HashSet;
16 16
import java.util.Map;
17 17
import java.util.Set;
18
import java.util.UUID;
19 18

  
20
import org.apache.commons.lang.StringUtils;
21 19
import org.apache.log4j.Logger;
22 20
import org.springframework.stereotype.Component;
23 21

  
......
91 89
				String phylumName = rs.getString("Phylum name");
92 90

  
93 91
				String preferredName = rs.getString("PreferredName");
94
				if (StringUtils.isBlank(preferredName)){
95
					logger.warn("Preferred name is blank. This case is not yet handled by IF import. RECORD UMBER" + CdmUtils.Nz(id));
92
				if (isBlank(preferredName)){
93
					logger.warn("Preferred name is blank. This case is not yet handled by IF import. RECORD NUMBER" + CdmUtils.Nz(id));
96 94
				}
97 95

  
98 96
				//Rank rank = Rank.SPECIES();
......
101 99
				INonViralName name = parser.parseSimpleName(preferredName, NomenclaturalCode.ICNAFP, null);
102 100

  
103 101
				Taxon taxon = Taxon.NewInstance(name, sourceReference);
104
				//if name is infraspecific the parent should be the species not the genus
105
				Taxon parent;
106
				if (!name.isInfraSpecific()){
107
				    parent = getParentTaxon(state, rs);
102
				//if name is infra-specific the parent should be the species not the genus
103
				Integer genusId = rs.getInt("PreferredNameFDCnumber");
104
		        if (!name.isInfraSpecific()){
105
				    Taxon parent = getParentTaxon(state, genusId);
108 106
				    if (parent == null){
109
	                    logger.warn("parent not found for name:" +preferredName);
107
	                    logger.warn("parent not found for name:" + preferredName + "ID(PreferredNameIFnumber)" +id+ "; GenusId(PreferredNameFDCnumber): ");
108
	                }else{
109
	                    classification.addParentChild(parent, taxon, null, null);
110 110
	                }
111
				    classification.addParentChild(parent, taxon, null, null);
112
				}
111
				}else {
112
                    state.getInfraspecificTaxaUUIDs().put(taxon.getUuid(), genusId);
113
                }
113 114

  
114 115
				//author + publication
115 116
				makeAuthorAndPublication(state, rs, name);
......
121 122
					ExtensionType fossilExtType = getExtensionType(state, ErmsTransformer.uuidExtFossilStatus, "fossil status", "fossil status", "fos. stat.");
122 123
					Extension.NewInstance(taxon, PesiTransformer.STR_FOSSIL_ONLY, fossilExtType);
123 124
				}
125

  
124 126
				//save
127
				getTaxonService().saveOrUpdate(taxon);
125 128

  
126
				UUID uuidTaxon = getTaxonService().saveOrUpdate(taxon);
127
				//getNameService().saveOrUpdate(name);
128
				if (name.isInfraSpecific()){
129
                    state.getInfraspecificTaxaUUIDs().add(uuidTaxon);
130
                }
131 129
			}
132 130
		} catch (Exception e) {
133 131
			e.printStackTrace();
......
138 136
		return success;
139 137
	}
140 138

  
141
    private Taxon getParentTaxon(IndexFungorumImportState state, ResultSet rs) throws SQLException {
142
		Integer genusId = rs.getInt("PreferredNameFDCnumber");
143

  
144
		Taxon taxon = state.getRelatedObject(NAMESPACE_GENERA, String.valueOf(genusId), Taxon.class);
145
		if (taxon == null){
146
			logger.warn("Taxon not found for " + genusId);
147
		}
148
		return taxon;
139
    private Taxon getParentTaxon(IndexFungorumImportState state, Integer genusId) {
140
        return state.getRelatedObject(NAMESPACE_GENERA, String.valueOf(genusId), Taxon.class);
149 141
	}
150 142

  
151 143
	@Override
152 144
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, IndexFungorumImportState state) {
153
		String nameSpace;
154
		Class<?> cdmClass;
145

  
146
	    String nameSpace;
155 147
		Set<String> idSet;
156 148
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
157 149

  
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/indexFungorum/IndexFungorumSubSpeciesImport.java
63 63
         propertyPaths.add("taxonNodes.parent.*");
64 64
         propertyPaths.add("taxonNodes.parent.taxon.*");
65 65
         Classification classification = getClassification(state);
66
        for (UUID infraspecificTaxonUUID: state.getInfraspecificTaxaUUIDs()){
66
        for (UUID infraspecificTaxonUUID: state.getInfraspecificTaxaUUIDs().keySet()){
67 67
        	TransactionStatus txStatus = startTransaction();
68 68
        	Taxon infraspecificTaxon = (Taxon)getTaxonService().load(infraspecificTaxonUUID, propertyPaths);
69 69

  
......
80 80
            List<TaxonBase> potentialParents = getTaxonService().findTaxaByName(matchingConfig);
81 81
                    //Taxon.class, parentNameString + "sec. ", MatchMode.BEGINNING, , pageSize, pageNumber, orderHints, propertyPaths)
82 82
                    //.searchNames(String uninomial,String infraGenericEpithet, String specificEpithet, String infraspecificEpithet, Rank rank, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,
83
            boolean matched = false;
83 84
            if (potentialParents.size()>1){
84 85
                for (@SuppressWarnings("rawtypes") TaxonBase potentialParent : potentialParents){
85 86
                    if (potentialParent.getTitleCache().equals(parentNameString + " sec*")){
86 87
                        classification.addParentChild((Taxon)potentialParent, infraspecificTaxon, null, null);
88
                        matched = true;
89
                        break;
87 90
                    }
88 91
                }
92
                if (matched == false){
93
                    logger.warn("Multiple match candidates but no match for " + name.getTitleCache());
94
                }
89 95
            }else if (!potentialParents.isEmpty()){
90 96
                Taxon parent = HibernateProxyHelper.deproxy(potentialParents.get(0), Taxon.class);
91
                Taxon child = (Taxon)getTaxonService().load(infraspecificTaxon.getUuid(), propertyPaths);
92
                classification.addParentChild(parent, child, null, null);
97
                classification.addParentChild(parent, infraspecificTaxon, null, null);
98
                matched = true;
93 99
            } else{
100
                Integer genusId = state.getInfraspecificTaxaUUIDs().get(infraspecificTaxonUUID);
101
                Taxon genusParent = getParentGenus(state, genusId);
102
//                Taxon genusParent = state.getRelatedObject(NAMESPACE_GENERA, String.valueOf(genusId), Taxon.class);
103
                classification.addParentChild(genusParent, infraspecificTaxon, null, null);
104
                logger.warn("Added infraspecific taxon to genus because species does not exist: " + infraspecificTaxon.getTitleCache());
105
                matched = true;
106
            }
107
            if (!matched){
94 108
                System.out.println("No parent for: " + name.getTitleCache());
95 109
            }
96 110
            getTaxonService().saveOrUpdate(infraspecificTaxon);
......
98 112
        }
99 113
	}
100 114

  
115
    private Taxon getParentGenus(IndexFungorumImportState state, Integer genusId) {
116
        Taxon result = getCommonService().getSourcedObjectByIdInSource(Taxon.class, String.valueOf(genusId), NAMESPACE_GENERA);
117
        return result;
118
    }
119

  
101 120
    private String getParentNameInfraSpecific(TaxonName taxonName){
102 121
        String parentName = taxonName.getGenusOrUninomial() + " " + taxonName.getSpecificEpithet();
103 122
        return parentName;

Also available in: Unified diff