Project

General

Profile

Download (5.07 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.io.dwca.in;
10

    
11
import java.util.ArrayList;
12
import java.util.HashSet;
13
import java.util.List;
14
import java.util.Map;
15
import java.util.Set;
16
import java.util.UUID;
17

    
18
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
19

    
20
import eu.etaxonomy.cdm.io.stream.IPartitionableConverter;
21
import eu.etaxonomy.cdm.io.stream.IReader;
22
import eu.etaxonomy.cdm.io.stream.ListReader;
23
import eu.etaxonomy.cdm.io.stream.MappedCdmBase;
24
import eu.etaxonomy.cdm.io.stream.PartitionableConverterBase;
25
import eu.etaxonomy.cdm.io.stream.StreamItem;
26
import eu.etaxonomy.cdm.io.stream.terms.TermUri;
27
import eu.etaxonomy.cdm.model.agent.Institution;
28
import eu.etaxonomy.cdm.model.agent.Person;
29
import eu.etaxonomy.cdm.model.common.CdmBase;
30
import eu.etaxonomy.cdm.model.permission.User;
31
import eu.etaxonomy.cdm.model.reference.Reference;
32

    
33
/**
34
 * @author a.mueller
35
 * @since 22.11.2011
36
 *
37
 */
38
public class EolAgent2CdmConverter extends PartitionableConverterBase<DwcaDataImportConfiguratorBase, DwcaDataImportStateBase<DwcaDataImportConfiguratorBase>>
39
				implements IPartitionableConverter<StreamItem, IReader<CdmBase>, String> {
40
	@SuppressWarnings("unused")
41
	private static final Logger logger = LogManager.getLogger(EolAgent2CdmConverter.class);
42
	private static final String CORE_ID = "coreId";
43

    
44
	/**
45
	 * @param state
46
	 */
47
	public EolAgent2CdmConverter(DwcaDataImportStateBase state) {
48
		super(state);
49
	}
50

    
51

    
52
	@Override
53
    public IReader<MappedCdmBase<? extends CdmBase>> map(StreamItem item ){
54
		List<MappedCdmBase<? extends CdmBase>> resultList = new ArrayList<>();
55

    
56
		Map<String, String> csv = item.map;
57
		Reference sourceReference = state.getTransactionalSourceReference();
58
		String sourceReferecenDetail = null;
59

    
60
		//TODO is taxon needed here here?
61
//		String id = csv.get(CORE_ID);
62
//		Taxon taxon = getTaxonBase(id, item, Taxon.class, state);
63

    
64
		String id = item.get(TermUri.DC_IDENTIFIER);
65
		String givenName = item.get(TermUri.FOAF_FIRST_NAME);
66
		String familyName = item.get(TermUri.FOAF_FAMILY_NAME);
67
		String name = item.get(TermUri.FOAF_NAME);
68
		String organization = item.get(TermUri.EOL_ORGANIZATION);
69
		String accountName = item.get(TermUri.FOAF_ACCOUNT_NAME);
70

    
71
		Institution institution = null;
72
		User user = null;
73
		if (isNotBlank(organization)){
74
			institution = Institution.NewInstance();
75
			institution.setName(organization);
76
			MappedCdmBase<Institution>  mcb = new MappedCdmBase<Institution>(TermUri.EOL_ORGANIZATION, id, institution);
77
			resultList.add(mcb);
78
		}
79
		if (isNotBlank(accountName)){
80
			user = User.NewInstance(accountName, UUID.randomUUID().toString());   //TODO
81
			MappedCdmBase<User>  mcb = new MappedCdmBase<User>(TermUri.FOAF_ACCOUNT_NAME, id, user);
82
			resultList.add(mcb);
83
		}
84

    
85
		if (isPerson(item)){
86
			Person person = Person.NewInstance();
87
			person.setGivenName(givenName);
88
			person.setFamilyName(familyName);
89
			if (isNotBlank(name) && ! name.equalsIgnoreCase(person.getTitleCache())){
90
				//TODO FOAF_NAME allows multiple names per object
91
				person.setTitleCache(name, true);
92
			}
93
			if (institution != null){
94
				person.addInstitutionalMembership(institution, null, null, null);
95
			}
96
			if (isNotBlank(accountName)){
97

    
98
			}
99

    
100
			MappedCdmBase<Person>  mcb = new MappedCdmBase<>(item.term, id, person);
101
			resultList.add(mcb);
102

    
103
		}else{
104
			//still unclear, what does Agent all include? Teams, organizations, ...?
105
			String message = "Agent type unclear. Agent not handled.";
106
			fireWarningEvent(message, item, 8);
107
		}
108

    
109
//		resultList.add(mcb);
110

    
111

    
112
		//return
113
		return new ListReader<>(resultList);
114

    
115
	}
116

    
117

    
118
	private boolean isPerson(StreamItem item) {
119
		String givenName = item.get(TermUri.FOAF_FIRST_NAME);
120
		String familyName = item.get(TermUri.FOAF_FAMILY_NAME);
121
		String accountName = item.get(TermUri.FOAF_ACCOUNT_NAME);
122
		if (isNotBlank(givenName) || isNotBlank(familyName) || isNotBlank(accountName) ){
123
			return true;
124
		}else{
125
			return false;
126
		}
127

    
128
	}
129

    
130

    
131
	@Override
132
	public String getSourceId(StreamItem item) {
133
		String id = item.get(CORE_ID);
134
		return id;
135
	}
136

    
137
//**************************** PARTITIONABLE ************************************************
138

    
139
	@Override
140
	protected void makeForeignKeysForItem(StreamItem item, Map<String, Set<String>> fkMap) {
141
		String value;
142
		String key;
143
		if ( hasValue(value = item.get(CORE_ID))){
144
			key = TermUri.DWC_TAXON.toString();
145
			Set<String> keySet = getKeySet(key, fkMap);
146
			keySet.add(value);
147
		}
148
	}
149

    
150

    
151
	@Override
152
	public final Set<String> requiredSourceNamespaces() {
153
		Set<String> result = new HashSet<>();
154
 		result.add(TermUri.DWC_TAXON.toString());
155
 		return result;
156
	}
157

    
158
//************************ STRING ************************************************/
159

    
160

    
161

    
162
	@Override
163
	public String toString(){
164
		return this.getClass().getName();
165
	}
166

    
167
}
(11-11/17)