Project

General

Profile

Download (11.5 KB) Statistics
| Branch: | Revision:
1
/**
2
 * Copyright (C) 2007 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

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

    
12
import java.net.URI;
13
import java.sql.ResultSet;
14
import java.sql.SQLException;
15
import java.util.Collection;
16
import java.util.HashMap;
17
import java.util.HashSet;
18
import java.util.Iterator;
19
import java.util.Map;
20
import java.util.Map.Entry;
21
import java.util.UUID;
22

    
23
import org.apache.commons.lang.StringUtils;
24
import org.apache.log4j.Logger;
25
import org.springframework.stereotype.Component;
26
import org.springframework.transaction.TransactionStatus;
27
import org.springframework.transaction.support.DefaultTransactionDefinition;
28

    
29
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
30
import eu.etaxonomy.cdm.io.common.ImportHelper;
31
import eu.etaxonomy.cdm.io.common.Source;
32
import eu.etaxonomy.cdm.model.agent.AgentBase;
33
import eu.etaxonomy.cdm.model.agent.Contact;
34
import eu.etaxonomy.cdm.model.agent.Institution;
35
import eu.etaxonomy.cdm.model.agent.Person;
36
import eu.etaxonomy.cdm.model.common.OriginalSourceBase;
37
import eu.etaxonomy.cdm.model.common.User;
38

    
39

    
40
/**
41
 * @author a.babadshanjan
42
 * @created 23.08.2010
43
 */
44
@Component
45
public class FaunaEuropaeaUsersImport extends FaunaEuropaeaImportBase {
46
	private static final Logger logger = Logger.getLogger(FaunaEuropaeaUsersImport.class);
47

    
48
	/* Interval for progress info message when retrieving taxa */
49
	private final int modCount = 10000;
50

    
51
	 protected DefaultTransactionDefinition txDefinition = new DefaultTransactionDefinition();
52

    
53
	/* (non-Javadoc)
54
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
55
	 */
56
	@Override
57
	protected boolean doCheck(FaunaEuropaeaImportState state) {
58
		boolean result = true;
59
		FaunaEuropaeaImportConfigurator fauEuConfig = state.getConfig();
60
		logger.warn("Checking for References not yet fully implemented");
61
		result &= checkReferenceStatus(fauEuConfig);
62

    
63
		return result;
64
	}
65

    
66
	private boolean checkReferenceStatus(FaunaEuropaeaImportConfigurator fauEuConfig) {
67
		boolean result = true;
68
//		try {
69
		Source source = fauEuConfig.getSource();
70
		String sqlStr = "";
71
//		ResultSet rs = source.getResultSet(sqlStr);
72
		return result;
73
//		} catch (SQLException e) {
74
//		e.printStackTrace();
75
//		return false;
76
//		}
77
	}
78

    
79
	/* (non-Javadoc)
80
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doInvoke(eu.etaxonomy.cdm.io.common.IImportConfigurator, eu.etaxonomy.cdm.api.application.CdmApplicationController, java.util.Map)
81
	 */
82
	@Override
83
	protected void doInvoke(FaunaEuropaeaImportState state) {
84
		/*
85
		logger.warn("Start User doInvoke");
86
		ProfilerController.memorySnapshot();
87
		*/
88
		if (state.getConfig().isDoAuthors()){
89
			return;
90
		}
91
		TransactionStatus txStatus = null;
92
		Map<String, Person> persons = null;
93
		Map<String, User> users= null;
94

    
95
		Map<Integer, UUID> userUuids = new HashMap<Integer, UUID>();
96
		Map<Integer, Institution> institiutions= new HashMap<Integer, Institution>();
97
		Collection<Institution> institutionsToSave = new HashSet<Institution>();
98
		int limit = state.getConfig().getLimitSave();
99
		//this.authenticate("admin", "00000");
100

    
101
		FaunaEuropaeaImportConfigurator fauEuConfig = state.getConfig();
102
		Source source = fauEuConfig.getSource();
103

    
104
		String namespace = "User";
105
		int i = 0;
106

    
107
		String selectCountUsers =
108
			" SELECT count(*) FROM Users";
109

    
110
		String selectColumnsUsers =
111
			" SELECT u.usr_id as userId, u.usr_title as title, u.usr_firstname as firstname, u.usr_lastname as lastname, u.usr_createdat as created, u.usr_password as password, u.usr_cou_id as country, u.usr_email as mail, "
112
			+ "u.usr_homepage as homepage, u.usr_description as description, u.usr_active as active, o.org_name as organisationName, o.org_homepage as organisationHomepage, o.org_id as institutionId FROM Users u LEFT JOIN Organisation o ON o.org_id= u.usr_org_id";
113

    
114
		int count;
115
		if(logger.isInfoEnabled()) { logger.info("Start making References (Users)..."); }
116

    
117
		try {
118
			ResultSet rsUser = source.getResultSet(selectCountUsers);
119
			rsUser.next();
120
			count = rsUser.getInt(1);
121

    
122
			rsUser= source.getResultSet(selectColumnsUsers);
123

    
124
	        if (logger.isInfoEnabled()) {
125
	        	logger.info("Get all References...");
126
				logger.info("Number of rows: " + count);
127
				logger.info("Count Query: " + selectCountUsers);
128
				logger.info("Select Query: " + selectColumnsUsers);
129
			}
130

    
131
	        while (rsUser.next()){//usr_country_id, usr_org_id, usr_email, usr_homepage, usr_groupname, usr_groupicon, usr_groupnote, usr_description, usr_active)
132
	        	int refId = rsUser.getInt("userId");
133
				String userTitle = rsUser.getString("title");
134
				String userFirstname = rsUser.getString("firstname");
135
				String userLastname = rsUser.getString("lastname");
136
				String createdDate = rsUser.getString("created");
137
				String userPwd = rsUser.getString("password");
138
				String userCountry = rsUser.getString("country");
139

    
140
				String userMail = rsUser.getString("mail");
141
				String userHomepage = rsUser.getString("homepage");
142
				//String userGroupName = rsUser.getString("u.usr_groupname");
143
				String userDescription = rsUser.getString("description");
144
				int userActive = rsUser.getInt("active");
145
				String orgName = rsUser.getString("organisationName");
146
				String orgHomepage = rsUser.getString("organisationHomepage");
147
				int institutionId = rsUser.getInt("institutionId");
148

    
149
				// build person
150
				String userPerson = "";
151
				if (userTitle != null) {
152
					userPerson = userTitle;
153
					if (! userTitle.endsWith(".")) {
154
						userPerson += ".";
155
					}
156
				}
157
				userPerson += userTitle == null ? NullToEmpty(userFirstname) : " " + NullToEmpty(userFirstname);
158
				if ((userTitle != null || userFirstname != null) && userLastname != null) {
159
					userPerson += " " + userLastname;
160
				}
161
				this.authenticate("admin", "00000");
162
				// build year
163
				String year = null;
164
				if (createdDate != null) {
165
					year = createdDate.substring(0, createdDate.indexOf("-"));
166
				}
167

    
168
				if ((i++ % limit) == 0) {
169

    
170
					txStatus = startTransaction();
171
					persons= new HashMap<String,Person>(limit);
172
					users = new HashMap<String,User>(limit);
173

    
174

    
175
					if(logger.isInfoEnabled()) {
176
						logger.info("i = " + i + " - User import transaction started");
177
					}
178
				}
179

    
180
				Person person = null;
181
				User user = null;
182

    
183
				person= Person.NewTitledInstance(userPerson);
184

    
185
				person.addEmailAddress(userMail);
186
				try{
187
				    if (!StringUtils.isBlank(userHomepage)){
188
				        person.addUrl(URI.create(userHomepage));
189
				    }
190
				}catch(IllegalArgumentException e){
191
				    logger.debug(e.getMessage());
192
				}
193
				if (institutionId != 1){//1 = private
194
				    Institution institution ;
195
				    if (!institiutions.containsKey(institutionId)){
196
				        institution = Institution.NewInstance();
197
				        institution.setName(orgName);
198
				        Contact contact = Contact.NewInstance();
199
	                    try{
200
	                        if (!StringUtils.isBlank(orgHomepage)){
201
	                            contact.addUrl(URI.create(orgHomepage));
202
	                        }
203
	                    }catch(IllegalArgumentException e){
204
	                        logger.debug(e.getMessage());
205
	                    }
206
	                    institution.setContact(contact);
207
	                    institutionsToSave.add(institution);
208
				    } else {
209
				        institution = institiutions.get(institutionId);
210
				    }
211

    
212

    
213
    				person.addInstitutionalMembership(institution, null, null, null);
214
				}
215
				user = User.NewInstance(userPerson, userPwd);
216
				user.setPerson(person);
217
				if (userActive == FaunaEuropaeaTransformer.U_ACTIVE){
218
				    user.setAccountNonLocked(false);
219
				} else{
220
				    user.setAccountNonLocked(true);
221
				}
222

    
223
				if (!persons.containsKey(userPerson)) {
224
					if (userPerson == null) {
225
						logger.warn("User is null");
226
					}
227

    
228
					persons.put(userPerson, person);
229
					if (logger.isTraceEnabled()) {
230
						logger.trace("Stored user (" + userPerson + ")");
231
					}
232
				//}
233

    
234
				} else {
235
					person = persons.get(userPerson);
236
					if (logger.isDebugEnabled()) {
237
						logger.debug("Not imported user with duplicated ref_id (" + refId +
238
							") " + userPerson);
239
					}
240
				}
241

    
242
				// set protected titleCache
243
				StringBuilder referenceTitleCache = new StringBuilder(person.getTitleCache() + ".");
244
				if (year != null) {
245
					referenceTitleCache.append(" " + year);
246
				}
247

    
248

    
249
				//ImportHelper.setOriginalSource(user, fauEuConfig.getSourceReference(), userId, namespace);
250
				ImportHelper.setOriginalSource(person, fauEuConfig.getSourceReference(), refId, namespace);
251

    
252

    
253
				// Store persons
254
				if (!users.containsKey(userPerson.toLowerCase())) {
255

    
256
					if (user == null) {
257
						logger.warn("User is null");
258
					}
259
					users.put(userPerson.toLowerCase(), user);
260
					if (logger.isTraceEnabled()) {
261
						logger.trace("Stored user (" + userPerson + ")");
262
					}
263
				} else {
264
					//if (logger.isDebugEnabled()) {
265
						logger.info("Duplicated user(" + userPerson +")");
266
					//}
267
					//continue;
268
				}
269

    
270
				if (((i % limit) == 0 && i > 1 ) || i == count ) {
271

    
272
					commitUsers(txStatus, persons, users,
273
							state.getAgentMap(),institutionsToSave, i);
274

    
275
					users = null;
276
					persons= null;
277
				}
278

    
279
	        }
280
	        if (users != null){
281
	        	commitUsers(txStatus, persons, users,  state.getAgentMap(), institutionsToSave,i);
282
	        	users = null;
283
				persons= null;
284
	        }
285
		}catch(SQLException e) {
286
			logger.error("SQLException:" +  e);
287
			state.setUnsuccessfull();
288
		}
289
		/*
290
		logger.warn("End User doInvoke");
291
		ProfilerController.memorySnapshot();
292
		*/
293
		if(logger.isInfoEnabled()) { logger.info("End making References (Users) ..."); }
294

    
295
		return;
296
	}
297

    
298
	private void commitUsers(TransactionStatus txStatus,
299
			Map<String, Person> persons,
300
			Map<String, User> users,
301
			Map<Integer, UUID> agentsUUID,
302
			Collection<Institution> institutionsToSave,
303
			int i) {
304

    
305
	    Map<UUID, AgentBase> instMap = getAgentService().save((Collection)institutionsToSave);
306
		Map<UUID, AgentBase> userMap = getAgentService().save((Collection)persons.values());
307
		logger.info("i = " + i + " - persons saved");
308

    
309

    
310

    
311
		Iterator<Entry<UUID, AgentBase>> it = userMap.entrySet().iterator();
312
		while (it.hasNext()){
313
			AgentBase person = it.next().getValue();
314
			int userID = Integer.valueOf(((OriginalSourceBase)person.getSources().iterator().next()).getIdInSource());
315
			UUID uuid = person.getUuid();
316
			agentsUUID.put(userID, uuid);
317
		}
318

    
319
		getUserService().save(users.values());
320
		logger.info("i = " + users.size() + " - users saved");
321
		//getReferenceService().save(references.values());
322
		//logger.info("i = " +references.size() + " - references saved");
323
		commitTransaction(txStatus);
324
	}
325

    
326
	/**
327
	 * Returns an empty string in case of a null string.
328
	 * This avoids having the string "null" when using StringBuilder.append(null);
329
	 * @param string
330
	 * @return
331
	 */
332
	private String NullToEmpty(String string) {
333
		if (string == null) {
334
			return "";
335
		} else {
336
			return string;
337
		}
338
	}
339

    
340
	/* (non-Javadoc)
341
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
342
	 */
343
	@Override
344
    protected boolean isIgnore(FaunaEuropaeaImportState state){
345
		return (state.getConfig().getDoReferences() == IImportConfigurator.DO_REFERENCES.NONE);
346
	}
347

    
348
}
(17-17/20)