Project

General

Profile

Download (4.91 KB) Statistics
| Branch: | Revision:
1
package eu.etaxonomy.cdm.io.pesi.indexFungorum;
2

    
3
import java.sql.ResultSet;
4
import java.util.ArrayList;
5
import java.util.List;
6
import java.util.Map;
7
import java.util.UUID;
8

    
9
import org.apache.log4j.Logger;
10
import org.springframework.stereotype.Component;
11
import org.springframework.transaction.TransactionStatus;
12

    
13
import eu.etaxonomy.cdm.api.service.config.MatchingTaxonConfigurator;
14
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
15
import eu.etaxonomy.cdm.model.common.CdmBase;
16
import eu.etaxonomy.cdm.model.name.TaxonName;
17
import eu.etaxonomy.cdm.model.taxon.Classification;
18
import eu.etaxonomy.cdm.model.taxon.Taxon;
19
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
20

    
21
/**
22
 * @author k.luther
23
 * @since 19.08.2014
24
 */
25
@Component
26
public class IndexFungorumSubSpeciesImport extends IndexFungorumImportBase {
27
	private static final Logger logger = Logger.getLogger(IndexFungorumSpeciesImport.class);
28

    
29
	private static final String pluralString = "subSpecies";
30

    
31

    
32
	public IndexFungorumSubSpeciesImport(){
33
		super(pluralString, null, null);
34

    
35
	}
36

    
37
	public IndexFungorumSubSpeciesImport(String pluralString,
38
			String dbTableName, Class cdmTargetClass) {
39
		super(pluralString, dbTableName, cdmTargetClass);
40

    
41
	}
42

    
43
	@Override
44
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(
45
			ResultSet rs, IndexFungorumImportState state) {
46
		// TODO Auto-generated method stub
47
		return null;
48
	}
49

    
50
	@Override
51
	protected String getRecordQuery(IndexFungorumImportConfigurator config) {
52
		// TODO Auto-generated method stub
53
		return null;
54
	}
55

    
56
	@Override
57
	protected boolean doCheck(IndexFungorumImportState state) {
58
		// TODO Auto-generated method stub
59
		return false;
60
	}
61

    
62
	@Override
63
	protected boolean isIgnore(IndexFungorumImportState state) {
64
		// TODO Auto-generated method stub
65
		return false;
66
	}
67

    
68
	@Override
69
    protected void doInvoke(IndexFungorumImportState state){
70
		System.out.println("create infraspecific - specific relationship: " + state.getInfraspecificTaxaUUIDs().size() + " taxa");
71

    
72
		 List<String> propertyPaths = new ArrayList<String>();
73
         propertyPaths.add("taxonNodes.*");
74
         propertyPaths.add("taxonNodes.classification");
75
         propertyPaths.add("taxonNodes.childNodes.*");
76
         propertyPaths.add("taxonNodes.childNodes.taxon.*");
77
         propertyPaths.add("taxonNodes.parent.*");
78
         propertyPaths.add("taxonNodes.parent.taxon.*");
79
         Classification classification = getClassification(state);
80
        for (UUID infraspecificTaxonUUID: state.getInfraspecificTaxaUUIDs()){
81
        	TransactionStatus txStatus = startTransaction();
82
        	Taxon infraspecificTaxon = (Taxon)getTaxonService().load(infraspecificTaxonUUID, propertyPaths);
83
            //HibernateProxyHelper.deproxy(infraspecificTaxon);
84
            TaxonName name = infraspecificTaxon.getName();
85

    
86
            UUID uuid = getNameService().saveOrUpdate(name);
87
            String parentNameString = getParentNameInfraSpecific(name);
88
            System.out.println("Parent name string: " + parentNameString);
89
            MatchingTaxonConfigurator matchingConfig = new MatchingTaxonConfigurator();
90
            matchingConfig.setTaxonNameTitle(parentNameString);
91

    
92
            matchingConfig.setPropertyPath(propertyPaths);
93
            List<TaxonBase> potentialParents = getTaxonService().findTaxaByName(matchingConfig);
94
                    //Taxon.class, parentNameString + "sec. ", MatchMode.BEGINNING, , pageSize, pageNumber, orderHints, propertyPaths)
95
                    //.searchNames(String uninomial,String infraGenericEpithet, String specificEpithet, String infraspecificEpithet, Rank rank, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,
96
            if (potentialParents.size()>1){
97
                for (TaxonBase potentialParent:potentialParents){
98
                    if (potentialParent.getTitleCache().equals(parentNameString + " sec*")){
99
                        classification.addParentChild((Taxon)potentialParent, infraspecificTaxon, null, null);
100
                    }
101
                }
102
            }else if (!potentialParents.isEmpty()){
103
                Taxon parent = HibernateProxyHelper.deproxy(potentialParents.get(0), Taxon.class);
104
                Taxon child = (Taxon)getTaxonService().load(infraspecificTaxon.getUuid(), propertyPaths);
105
                classification.addParentChild(parent, child, null, null);
106
            } else{
107
                System.out.println("No parent for: " + name.getTitleCache());
108
            }
109
            getTaxonService().saveOrUpdate(infraspecificTaxon);
110
            commitTransaction(txStatus);
111
        }
112
	}
113
	/**
114
     * @param taxon
115
     * @return
116
     */
117
    private String getParentNameInfraSpecific(TaxonName taxonName){
118
        TaxonName name =  HibernateProxyHelper.deproxy(taxonName);
119
       String parentName = name.getGenusOrUninomial() + " " + name.getSpecificEpithet();
120

    
121
       return parentName;
122
    }
123

    
124
}
(8-8/10)