Project

General

Profile

« Previous | Next » 

Revision 34342

Added by Nikon Gasparis over 9 years ago

*new version of validator service
*it now includes the validator implementation(replaces uoa-validator)
*registry for jobs,rules and providers is now removed.
*supports and implements the new ValidatorService interface
*new way to submit a new job (a common method is used for tests,registrations,or cris)
*content and usage jobs are now merged to one.
*listeners updated to support job merging
*works as standalone or with IS (BETA)

View differences:

modules/uoa-validator-service/trunk/src/main/java/gr/uoa/di/validator/service/impl/ValidatorManagerImpl.java
1
package gr.uoa.di.validator.service.impl;
2

  
3
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
4
import eu.dnetlib.enabling.tools.blackboard.BlackboardNotificationHandler;
5
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
6
import eu.dnetlib.validator.service.dao.Utilities;
7
import eu.dnetlib.validator.service.dao.jobs.JobSubmitted;
8
import eu.dnetlib.validator.service.dao.jobs.JobSubmittedDAO;
9
import eu.dnetlib.validator.service.dao.rules.RuleSet;
10
import eu.dnetlib.validator.service.dao.rules.RuleSetDAO;
11
import eu.dnetlib.validator.service.dao.rules.RuleStored;
12
import eu.dnetlib.validator.service.dao.rules.RuleStoredDAO;
13
import gr.uoa.di.validator.Validator;
14
import gr.uoa.di.validator.ValidatorException;
15
import gr.uoa.di.validator.data.Rule;
16
import gr.uoa.di.validator.execution.Job;
17
import gr.uoa.di.validator.impls.MemoryThreadValidator;
18
import gr.uoa.di.validator.impls.listeners.DnetListener;
19
import gr.uoa.di.validator.impls.listeners.ValidatorJobListener;
20
import gr.uoa.di.validator.impls.providers.DnetProvider;
21
import gr.uoa.di.validator.impls.providers.OAIPMHRecordProvider;
22
import gr.uoa.di.validator.impls.providers.OAIPMHSinglePageVerbProvider;
23
import gr.uoa.di.validator.impls.rules.ChainRule;
24
import gr.uoa.di.validator.impls.rules.RuleTypes;
25

  
26
import java.io.Serializable;
27
import java.lang.reflect.InvocationTargetException;
28
import java.util.ArrayList;
29
import java.util.HashMap;
30
import java.util.HashSet;
31
import java.util.List;
32
import java.util.Map;
33
import java.util.Properties;
34
import java.util.Set;
35

  
36
import org.apache.log4j.Logger;
37
import org.springframework.transaction.annotation.Propagation;
38
import org.springframework.transaction.annotation.Transactional;
39

  
40
@Transactional(propagation = Propagation.REQUIRED)
41
public abstract class ValidatorManagerImpl implements ValidatorManager {
42

  
43
	private Validator validator;
44
	private JobSubmittedDAO jobSubmittedDao;
45
	private RuleSetDAO ruleSetDao;
46
	private RuleStoredDAO ruleStoredDao;
47

  
48
	private Integer jobIdRegistry = 1;
49
	private Integer ruleIdRegistry = 1;
50

  
51
	private static Logger logger = Logger.getLogger(ValidatorManagerImpl.class);
52

  
53
	protected abstract ValidatorJobListener createListener();
54
	protected abstract DnetListener createDnetListener();
55

  
56
	public void start() {
57
		logger.debug("Initializing Validator Manager module");
58
	}
59
	
60
	@Transactional(propagation = Propagation.REQUIRED)
61
	public JobSubmitted beginDataJobForWorkflow(String mdstoreId, String guidelines, String groupBy, BlackboardJob bJob, BlackboardNotificationHandler<BlackboardServerHandler> blackboardHandler, int workers) throws ValidatorException{
62
		try {
63
			logger.debug("Submitting data job for workflow");
64
//			String desiredCompatibility = "openaire3.0";
65
			Set<Integer> ruleIdsContent = new HashSet<Integer>();
66
			for (RuleSet ruleset : ruleSetDao.getRuleSets()) {
67
				if (ruleset.getGuidelinesAcronym().equals(guidelines)) {
68
					ruleIdsContent = Utilities.convertListToSet(ruleset.getRuleIdsContent());
69
				}	
70
			}
71
			Properties pros = new Properties();
72

  
73
			pros.setProperty(DnetProvider.MDSTORE_ID, mdstoreId);
74
//			pros.setProperty(DnetProvider.BATCH_SIZE, bJob.getParameters().get("batchSize"));
75
			pros.setProperty(DnetProvider.BATCH_SIZE, "50");
76
			pros.setProperty(DnetProvider.RECORDS, bJob.getParameters().get("records"));
77
			
78
			JobSubmitted newJob = new JobSubmitted();
79

  
80
			Set<Integer> rules = new HashSet<Integer>();
81
			
82
			Map<Integer,Integer> ruleLinkingMap = new HashMap<Integer,Integer>();
83

  
84
			for (Integer ruleId : ruleIdsContent) {
85

  
86
				RuleStored tempRule=ruleStoredDao.get(ruleId.toString());
87
				
88
				//special behaviour type of rule is chain
89
				if(tempRule.getType().equals("ChainRule")) {
90
					ChainRule<Rule> chainRule = this.handleChain(tempRule);
91
					validator.addToRegistry(ruleIdRegistry,chainRule, MemoryThreadValidator.RegistryType.rules);					
92
				}
93
				else {
94
					validator.addToRegistry(ruleIdRegistry,this.getRuleClassInstanceByType(tempRule.getType(), tempRule.getConfiguration(), ruleIdRegistry), MemoryThreadValidator.RegistryType.rules);
95
				}
96
				rules.add(ruleIdRegistry);
97
//				this.linkRules(ruleIdRegistry, ruleId);
98
				ruleLinkingMap.put(ruleIdRegistry, ruleId);
99
				ruleIdRegistry++;
100
			}
101
					
102
			Job job = new Job(this.jobIdRegistry, 3, rules, pros);
103
			this.jobIdRegistry++;
104
			
105
			newJob.setUser("Workflow Service");
106
			newJob.setValidationType("OAI Content");
107
			newJob.setGuidelines(guidelines);
108
			newJob.setStatus("working");
109
			newJob.setJobType("Workflow Request");
110
			newJob.setDuration("--");
111
			newJob.setRepo(mdstoreId);
112
			newJob.setRules(ruleIdsContent);
113
			newJob.setRecords(pros.getProperty(DnetProvider.RECORDS));
114
			newJob.setSet("dnet-workflow");
115
			newJob.setGroupBy_xpath(groupBy);
116
			newJob.setMetadata_prefix("oai_dc");
117
			newJob.setId("-1");
118
			int jobIdStored = jobSubmittedDao.save(newJob);
119
			
120
			ValidatorJobListener listener = createListener();
121
			listener.setJobSubmittedId(jobIdStored);
122
			listener.setJobSubmittedUser("Workflow Service");
123
			listener.setRuleLinkingMap(ruleLinkingMap);
124
			listener.setGroupBy_xpath(groupBy);
125
			listener.setInternalJobsSum(workers);
126

  
127
			DnetListener dnetListener = createDnetListener();
128
			dnetListener.setJob(bJob);
129
			dnetListener.setBlackboardHandler(blackboardHandler);
130

  
131
			validator.submitJob(job, workers, listener, dnetListener);
132

  
133
			return newJob;
134
			
135
			
136
		} catch (Exception e) {
137
			logger.error("Error Submitting content job", e);
138
			throw new ValidatorException(e);
139
		}
140
	}
141

  
142
	@Override
143
	public JobSubmitted beginContentJobForWorkflow(String baseUrl, String validationSet, BlackboardJob bJob, BlackboardNotificationHandler<BlackboardServerHandler> blackboardHandler) throws ValidatorException {
144
		try {
145
			logger.debug("Submitting content job for workflow");
146
			Set<Integer> ruleIdsContent = new HashSet<Integer>();
147
			for (RuleSet ruleset : ruleSetDao.getRuleSets()) {
148
				String regRuleset;
149
				if (validationSet.equalsIgnoreCase("openaire_data")) {
150
					regRuleset = "OpenAIRE For Data Archives";
151
				} else {
152
					regRuleset = "OpenAIRE For Literature Repositories";
153
				}
154
				if (ruleset.getName().equals(regRuleset)) {
155
					ruleIdsContent = Utilities.convertListToSet(ruleset.getRuleIdsContent());
156
				}
157
			}
158

  
159
			Properties pros = null;
160
			pros = new Properties();
161
			pros.setProperty(OAIPMHRecordProvider.BASEURL, baseUrl);
162
			pros.setProperty(OAIPMHRecordProvider.METADATA_PREFIX, "oai_dc");
163
			pros.setProperty(OAIPMHRecordProvider.TIMEOUT, "360000");
164
			pros.setProperty(OAIPMHRecordProvider.DELAY, "1000");
165
			pros.setProperty(OAIPMHRecordProvider.RETRY_DELAY, "60000");
166
			pros.setProperty(OAIPMHRecordProvider.RETRY_EFFORTS, "3");
167
			// pros.setProperty(OAIPMHRecordProvider.RECORDS, "20");
168
			pros.setProperty(OAIPMHRecordProvider.RECORDS, "all");
169
			pros.setProperty(OAIPMHRecordProvider.SET, validationSet);
170

  
171
			JobSubmitted newJob = new JobSubmitted();
172

  
173
			Set<Integer> rules = new HashSet<Integer>();
174
			
175
			Map<Integer,Integer> ruleLinkingMap = new HashMap<Integer,Integer>();
176

  
177
			for (Integer ruleId : ruleIdsContent) {
178
				RuleStored tempRule = ruleStoredDao.get(ruleId.toString());
179

  
180
				// special behaviour type of rule is chain
181
				if (tempRule.getType().equals("ChainRule")) {
182
					logger.debug("chain rule found");
183
					RuleStored tempRuleChain1 = ruleStoredDao.get(tempRule.getConfiguration().getProperty("rule_1"));
184
					RuleStored tempRuleChain2 = ruleStoredDao.get(tempRule.getConfiguration().getProperty("rule_2"));
185
					List<Rule> rules_chain = new ArrayList<Rule>();
186
					rules_chain.add((Rule) this.getRuleClassInstanceByType(tempRuleChain1.getType(), tempRuleChain1.getConfiguration(), ruleIdRegistry));
187
					ruleIdRegistry++;
188
					rules_chain.add((Rule) this.getRuleClassInstanceByType(tempRuleChain2.getType(), tempRuleChain2.getConfiguration(), ruleIdRegistry));
189
					ruleIdRegistry++;
190

  
191
					Properties chainPros = new Properties();
192
					chainPros.setProperty(ChainRule.TYPE, tempRule.getConfiguration().getProperty(ChainRule.TYPE));
193
					ChainRule<Rule> chainRule = new ChainRule<Rule>(chainPros, ruleIdRegistry, rules_chain);
194

  
195
					validator.addToRegistry(ruleIdRegistry, chainRule, MemoryThreadValidator.RegistryType.rules);
196
				} else {
197
					validator.addToRegistry(ruleIdRegistry, this.getRuleClassInstanceByType(tempRule.getType(), tempRule.getConfiguration(), ruleIdRegistry), MemoryThreadValidator.RegistryType.rules);
198
				}
199
				rules.add(ruleIdRegistry);
200
//				this.linkRules(ruleIdRegistry, ruleId);
201
				ruleLinkingMap.put(ruleIdRegistry, ruleId);
202
				ruleIdRegistry++;
203
			}
204
			if (pros.getProperty(OAIPMHRecordProvider.SET).equalsIgnoreCase(
205
					"openaire_data"))
206
				pros.setProperty(OAIPMHRecordProvider.METADATA_PREFIX,
207
						"oai_datacite");
208

  
209
			Job job = new Job(this.jobIdRegistry, 1, rules, pros);
210
			this.jobIdRegistry++;
211

  
212
			newJob.setUser("Workflow Service");
213
			newJob.setValidationType("OAI Content");
214
//			newJob.setType("OAI Content Validation");
215
			newJob.setStatus("working");
216
			newJob.setJobType("Workflow Request");
217
			//TODO FIX
218
			newJob.setGuidelines("OpenAIRE For Literature Repositories");
219
			newJob.setActivation_id(null);
220
			newJob.setDuration("--");
221
			newJob.setRepo(baseUrl);
222
			newJob.setRules(ruleIdsContent);
223
			newJob.setRecords(pros.getProperty(OAIPMHRecordProvider.RECORDS));
224
			newJob.setSet(pros.getProperty(OAIPMHRecordProvider.SET));
225
			newJob.setGroupBy_xpath(null);
226
			newJob.setMetadata_prefix(pros.getProperty(OAIPMHRecordProvider.METADATA_PREFIX));
227
			newJob.setId("-1");
228
			int jobIdStored = jobSubmittedDao.save(newJob);
229

  
230
			ValidatorJobListener listener = createListener();
231
			listener.setJobSubmittedId(jobIdStored);
232
			listener.setJobSubmittedUser("Workflow Service");
233
			listener.setRuleLinkingMap(ruleLinkingMap);
234
			listener.setGroupBy_xpath(null);
235
			listener.setInternalJobsSum(1);
236

  
237
			DnetListener dnetListener = createDnetListener();
238
			dnetListener.setJob(bJob);
239
			dnetListener.setBlackboardHandler(blackboardHandler);
240

  
241
			validator.submitJob(job, 1, listener, dnetListener);
242
			return newJob;
243

  
244
		} catch (Exception e) {
245
			logger.error("Error Submitting content job for workflow", e);
246
			throw new ValidatorException(e);
247
		}
248

  
249
	}
250

  
251
	@Override
252
	public JobSubmitted beginUsageJobForWorkflow(String baseUrl, String validationSet, BlackboardJob bJob, BlackboardNotificationHandler<BlackboardServerHandler> blackboardHandler) throws ValidatorException {
253
		try {
254

  
255
			logger.debug("Submitting Usage job(s) for workflow");
256

  
257
			Set<Integer> ruleIdsUsage = new HashSet<Integer>();
258
			for (RuleSet ruleset : ruleSetDao.getRuleSets()) {
259
				String regRuleset;
260
				if (validationSet.equalsIgnoreCase("openaire_data")) {
261
					regRuleset = "OpenAIRE For Data Archives";
262
				} else {
263
					regRuleset = "OpenAIRE For Literature Repositories";
264
				}
265
				if (ruleset.getName().equals(regRuleset)) {
266
					ruleIdsUsage = Utilities.convertListToSet(ruleset
267
							.getRuleIdsUsage());
268
				}
269
			}
270

  
271
			Properties pros = new Properties();
272
			pros.setProperty(OAIPMHSinglePageVerbProvider.BASEURL, baseUrl);
273
			pros.setProperty(OAIPMHSinglePageVerbProvider.TIMEOUT, "360000");
274
			pros.setProperty(OAIPMHSinglePageVerbProvider.DELAY, "1000");
275
			pros.setProperty(OAIPMHSinglePageVerbProvider.RETRY_DELAY, "60000");
276
			pros.setProperty(OAIPMHSinglePageVerbProvider.RETRY_EFFORTS, "3");
277

  
278
			JobSubmitted newJob = new JobSubmitted();
279

  
280
			List<RuleStored> rulesStored = new ArrayList<RuleStored>();
281
			for (Integer id : ruleIdsUsage) {
282
				logger.debug("Rule with id: " + id + " added");
283
				rulesStored.add(ruleStoredDao.get(id.toString()));
284
			}
285

  
286
			logger.debug("Creating map for provider information");
287
			Map<String, Set<Integer>> verbRuleMap = new HashMap<String, Set<Integer>>();
288
			Set<Integer> old, temp = null;
289
			for (RuleStored ruleStored : rulesStored) {
290
				logger.debug("Checking for verb : " + ruleStored.getProvider_information());
291
				if ((old = verbRuleMap.get(ruleStored.getProvider_information())) == null) {
292
					logger.debug("Verb doesn't exist");
293
					temp = new HashSet<Integer>();
294
					temp.add(Integer.parseInt(ruleStored.getId()));
295
					verbRuleMap.put(ruleStored.getProvider_information(), temp);
296
				} else {
297
					logger.debug("Verb exists");
298
					old.add(Integer.parseInt(ruleStored.getId()));
299
				}
300
			}
301

  
302
			Set<Integer> rules = null;
303

  
304
			Job job = null;
305
			newJob.setUser("Workflow Service");
306
			newJob.setValidationType("OAI Usage");
307
			newJob.setStatus("working");
308
			newJob.setJobType("Workflow Request");
309
			//TODO FIX
310
			newJob.setGuidelines("OpenAIRE For Literature Repositories");
311
			newJob.setActivation_id(null);
312
			newJob.setDuration("--");
313
			newJob.setRepo(pros.getProperty(OAIPMHSinglePageVerbProvider.BASEURL));
314
			newJob.setRules(ruleIdsUsage);
315
			newJob.setMetadata_prefix(pros.getProperty(OAIPMHRecordProvider.METADATA_PREFIX));
316
			newJob.setId("-1");
317

  
318
			int jobIdStored = jobSubmittedDao.save(newJob);
319

  
320
			Map<Integer,Integer> ruleLinkingMap = new HashMap<Integer,Integer>();
321
			
322
			ValidatorJobListener listener = createListener();
323
			listener.setJobSubmittedId(jobIdStored);
324
			listener.setJobSubmittedUser("Workflow Service");
325
			listener.setRuleLinkingMap(ruleLinkingMap);
326

  
327
			listener.setInternalJobsSum(verbRuleMap.size());
328
			for (Map.Entry<String, Set<Integer>> entry : verbRuleMap.entrySet()) {
329
				pros.remove(OAIPMHSinglePageVerbProvider.VERB);
330
				pros.setProperty(OAIPMHSinglePageVerbProvider.VERB,
331
						entry.getKey());
332
				rules = new HashSet<Integer>();
333
				for (Integer ruleId : entry.getValue()) {
334
					RuleStored tempRule = ruleStoredDao.get(Integer
335
							.toString(ruleId));
336
					logger.debug("prepare to add rule to registry with regexp: " + tempRule.getConfiguration().getProperty("regexp") + " and ruleIdregistry: " + ruleIdRegistry);
337
					validator.addToRegistry(ruleIdRegistry, this.getRuleClassInstanceByType(tempRule.getType(), tempRule.getConfiguration(), ruleIdRegistry), MemoryThreadValidator.RegistryType.rules);
338
					rules.add(ruleIdRegistry);
339
//					this.linkRules(ruleIdRegistry, ruleId);
340
					ruleLinkingMap.put(ruleIdRegistry, ruleId);
341
					ruleIdRegistry++;
342
				}
343

  
344
				job = new Job(this.jobIdRegistry, 2, rules, pros);
345

  
346
				DnetListener dnetListener = createDnetListener();
347
				dnetListener.setJob(bJob);
348
				dnetListener.setBlackboardHandler(blackboardHandler);
349

  
350
				validator.submitJob(job, 1, listener, dnetListener);
351

  
352
				this.jobIdRegistry++;
353
			}
354
			return newJob;
355
		} catch (Exception e) {
356
			logger.error("Error Submitting usage job(s)", e);
357
			throw new ValidatorException(e);
358
		}
359

  
360
	}
361

  
362
	private Serializable getRuleClassInstanceByType(String type,
363
			Properties pros, int id) throws ValidatorException {
364
		logger.debug("getting rule object of type " + type);
365
		String classname = RuleTypes.getClassOfType(type);
366
		if (classname == null) {
367
			logger.debug("error getting rule object of type " + type
368
					+ " classname=null");
369
			return null;
370
		} else {
371
			try {
372
				Class<?> clazz = Class.forName(classname);
373
				logger.debug("classname: " + clazz.getName());
374
				return (Serializable) clazz.getConstructor(
375
						new Class[] { Properties.class, Integer.TYPE })
376
						.newInstance(pros, id);
377

  
378
			} catch (ClassNotFoundException e) {
379
				logger.debug("error getting rule object: " + e);
380
				return null;
381
			} catch (NoSuchMethodException e) {
382
				logger.debug("error getting rule object: " + e);
383
				return null;
384
			} catch (InvocationTargetException e) {
385
				logger.debug("error getting rule object: " + e);
386
				return null;
387
			} catch (InstantiationException e) {
388
				logger.debug("error getting rule object: " + e);
389
				return null;
390
			} catch (IllegalAccessException e) {
391
				logger.debug("error getting rule object: " + e);
392
				return null;
393
			}
394
		}
395

  
396
	}
397
	
398
	private ChainRule<Rule> handleChain(RuleStored tempRule) throws Exception {
399
		logger.debug("chain rule found");
400
		List<Rule> rules_chain = new ArrayList<Rule>();
401
		RuleStored tempRuleChain1=ruleStoredDao.get(tempRule.getConfiguration().getProperty("rule_1"));
402
		if(tempRuleChain1.getType().equals("ChainRule")) {
403
			ChainRule<Rule> chainRule1 = this.handleChain(tempRuleChain1);
404
			rules_chain.add(chainRule1);
405
			ruleIdRegistry++;
406
		} else {
407
			rules_chain.add((Rule) this.getRuleClassInstanceByType(tempRuleChain1.getType(), tempRuleChain1.getConfiguration(), ruleIdRegistry));
408
			ruleIdRegistry++;
409
		}
410
		RuleStored tempRuleChain2=ruleStoredDao.get(tempRule.getConfiguration().getProperty("rule_2"));
411
		if(tempRuleChain2.getType().equals("ChainRule")) {
412
			ChainRule<Rule> chainRule2 = this.handleChain(tempRuleChain2);
413
			rules_chain.add(chainRule2);
414
			ruleIdRegistry++;
415
		} else {
416
			rules_chain.add((Rule) this.getRuleClassInstanceByType(tempRuleChain2.getType(), tempRuleChain2.getConfiguration(), ruleIdRegistry));
417
			ruleIdRegistry++;
418
		}
419
		Properties chainPros = new Properties();
420
		chainPros.setProperty(ChainRule.TYPE,tempRule.getConfiguration().getProperty(ChainRule.TYPE));
421
		ChainRule<Rule> chainRule = new ChainRule<Rule>(chainPros, ruleIdRegistry, rules_chain);
422
		return chainRule;
423
	}
424

  
425
//	private void linkRules(int ruleRegistry, int ruleStored) {
426
//		this.ruleLinkingMap.put(ruleRegistry, ruleStored);
427
//	}
428
//
429
//	private int getRuleFromLink(int ruleRegistry) {
430
//		return this.ruleLinkingMap.get(ruleRegistry);
431
//	}
432

  
433
	public Validator getValidator() {
434
		return validator;
435
	}
436
	public void setValidator(Validator validator) {
437
		this.validator = validator;
438
	}
439
	public JobSubmittedDAO getJobSubmittedDao() {
440
		return jobSubmittedDao;
441
	}
442
	public void setJobSubmittedDao(JobSubmittedDAO jobSubmittedDao) {
443
		this.jobSubmittedDao = jobSubmittedDao;
444
	}
445
	public RuleSetDAO getRuleSetDao() {
446
		return ruleSetDao;
447
	}
448
	public void setRuleSetDao(RuleSetDAO ruleSetDao) {
449
		this.ruleSetDao = ruleSetDao;
450
	}
451
	public RuleStoredDAO getRuleStoredDao() {
452
		return ruleStoredDao;
453
	}
454
	public void setRuleStoredDao(RuleStoredDAO ruleStoredDao) {
455
		this.ruleStoredDao = ruleStoredDao;
456
	}
457
//	public Map<Integer, Integer> getRuleLinkingMap() {
458
//		return ruleLinkingMap;
459
//	}
460
//	public void setRuleLinkingMap(Map<Integer, Integer> ruleLinkingMap) {
461
//		this.ruleLinkingMap = ruleLinkingMap;
462
//	}
463
}
modules/uoa-validator-service/trunk/src/main/java/gr/uoa/di/validator/service/impl/ValidatorServiceImpl.java
1
package gr.uoa.di.validator.service.impl;
2

  
3
import eu.dnetlib.api.functionality.ValidatorService;
4
import eu.dnetlib.domain.ActionType;
5
import eu.dnetlib.domain.EPR;
6
import eu.dnetlib.domain.ResourceType;
7
import eu.dnetlib.domain.enabling.Notification;
8
import eu.dnetlib.enabling.tools.blackboard.BlackboardNotificationHandler;
9
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
10
import gr.uoa.di.driver.app.DriverServiceImpl;
11
import gr.uoa.di.driver.enabling.issn.NotificationListener;
12

  
13
import org.apache.log4j.Logger;
14

  
15
public class ValidatorServiceImpl extends DriverServiceImpl implements
16
		ValidatorService {
17

  
18
	private BlackboardNotificationHandler<BlackboardServerHandler> blackboardNotificationHandler = null;
19
	private Logger logger = Logger.getLogger(ValidatorServiceImpl.class);
20

  
21
	
22
	// do NOT call directly. It will be called by the
23
	// InitializingServiceRegistrationManager
24
	// after it sets the service EPR and id.
25
	@Override
26
	public void init() {
27
		super.init();
28
		this.subscribe(ActionType.UPDATE,
29
				ResourceType.VALIDATORSERVICERESOURCETYPE, this
30
						.getServiceEPR().getParameter("serviceId"),
31
				"RESOURCE_PROFILE/BODY/BLACKBOARD/LAST_REQUEST",
32
				new NotificationListener() {
33
					@Override
34
					public void processNotification(Notification notification) {
35
						blackboardNotificationHandler.notified(
36
								notification.getSubscriptionId(),
37
								notification.getTopic(),
38
								notification.getIsId(),
39
								notification.getMessage());
40
						logger.debug(notification.getSubscriptionId());
41
						logger.debug(notification.getTopic());
42
						logger.debug(notification.getIsId());
43
						logger.debug(notification.getMessage());
44
					}
45
				});
46
	}
47

  
48
	public BlackboardNotificationHandler<BlackboardServerHandler> getBlackboardNotificationHandler() {
49
		return blackboardNotificationHandler;
50
	}
51

  
52
	public void setBlackboardNotificationHandler(
53
			BlackboardNotificationHandler<BlackboardServerHandler> blackboardNotificationHandler) {
54
		this.blackboardNotificationHandler = blackboardNotificationHandler;
55
	}
56

  
57
	@Override
58
	public EPR validate(EPR datasource) {
59
		throw new UnsupportedOperationException();
60
	}
61
}
modules/uoa-validator-service/trunk/src/main/java/gr/uoa/di/validator/service/impl/NotificationListener.java
1
package gr.uoa.di.validator.service.impl;
2

  
3
import org.apache.log4j.Logger;
4

  
5
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
6
import eu.dnetlib.enabling.tools.blackboard.BlackboardNotificationHandler;
7
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
8
import gr.uoa.di.validator.ValidatorException;
9

  
10
public class NotificationListener extends
11
		BlackboardNotificationHandler<BlackboardServerHandler> {
12

  
13
	private static Logger logger = Logger.getLogger(NotificationListener.class);
14
	private ValidatorManager valManager;
15
	
16
	@Override
17
	protected void processJob(BlackboardJob job) {
18
		super.processJob(job);
19
		
20
		logger.debug("New Job!");
21
		String baseUrl = job.getParameters().get("baseUrl");
22
		String validationSet = job.getParameters().get("validationSet");
23
		String validationType = job.getParameters().get("validationType");
24
		String type = job.getParameters().get("type"); //OAI
25
		String mdstoreId = job.getParameters().get("mdstoreId");
26
		String guidelines = job.getParameters().get("guidelines");
27
		String groupBy = job.getParameters().get("groupBy");
28
//		String workers = job.getParameters().get("workers");
29
		String workers = "4";
30
		logger.debug("New Job of type: " + type);
31
			
32
		try {
33
			if (type.equalsIgnoreCase("OAI")) {
34
				logger.debug("type is oai");
35

  
36
//				if (validationType.equalsIgnoreCase("OAI Content Validation"))
37
//					valManager.beginContentJobForWorkflow(baseUrl, validationSet, job, this);
38
//				else if (validationType.equalsIgnoreCase("OAI Usage Validation"))
39
//					valManager.beginUsageJobForWorkflow(baseUrl, validationSet, job, this);
40
//				else
41
//					throw new ValidatorException("Unknown validation type " + type);
42

  
43
			} else if (type.equalsIgnoreCase("DNET")) {
44
				logger.debug("type is dnet");
45
				logger.debug("groupBy: " + groupBy);
46

  
47
				valManager.beginDataJobForWorkflow(mdstoreId, guidelines, groupBy, job, this,Integer.parseInt(workers));
48
			}
49
			this.getBlackboardHandler().ongoing(job);
50

  
51
		} catch (ValidatorException e) {
52
			
53
			logger.error("Failed to begin the workflow for the job received", e);
54
			getBlackboardHandler().failed(job, e);
55
		}
56
		
57
		
58
		
59
//		valManager.preRegistrationValidations(baseUrl, officialName, activationId, userMail, adminMail, validationSet, datasourceId)
60
		//TODO: kaleitai otan erxetai notification apo to DNET gia 
61
		// ksekinisei douleia. Pairneis parametrous apo to job
62
		// antikeimeno:
63
		
64
		// job.getParameters().get("a param name ");
65
		// kai kapws kaleis to validator engine.
66
		
67
		// kai enimerwneis gia to status tou job:
68

  
69
		
70
	}
71

  
72
	public ValidatorManager getValManager() {
73
		return valManager;
74
	}
75

  
76
	public void setValManager(ValidatorManager valManager) {
77
		this.valManager = valManager;
78
	}
79
}
modules/uoa-validator-service/trunk/src/main/java/gr/uoa/di/validator/service/impl/ValidatorManager.java
1
package gr.uoa.di.validator.service.impl;
2

  
3
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
4
import eu.dnetlib.enabling.tools.blackboard.BlackboardNotificationHandler;
5
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
6
import eu.dnetlib.validator.service.dao.jobs.JobSubmitted;
7
import gr.uoa.di.validator.ValidatorException;
8

  
9
public interface ValidatorManager {
10

  
11
	public JobSubmitted beginDataJobForWorkflow(String datasource, String guidelines, String groupBy, BlackboardJob bJob, BlackboardNotificationHandler<BlackboardServerHandler> blackboardHandler, int workers) throws ValidatorException;
12

  
13
	public JobSubmitted beginContentJobForWorkflow(String baseUrl, String validationSet, BlackboardJob bJob, BlackboardNotificationHandler<BlackboardServerHandler> blackboardHandler) throws ValidatorException;
14

  
15
	public JobSubmitted beginUsageJobForWorkflow(String baseUrl, String validationSet, BlackboardJob bJob, BlackboardNotificationHandler<BlackboardServerHandler> blackboardHandler) throws ValidatorException;
16
}
modules/uoa-validator-service/trunk/src/main/java/eu/dnetlib/validator/service/email/Emailer.java
1
package eu.dnetlib.validator.service.email;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5

  
6
import org.apache.log4j.Logger;
7

  
8
import eu.dnetlib.utils.MailLibrary;
9

  
10
public class Emailer {
11

  
12
	private static Logger logger = Logger.getLogger(Emailer.class);
13

  
14
	private List<String> specialRecipients = new ArrayList<String>();
15
	private boolean override = false, logonly = false;
16
	private String overrideEmail = null, from = null;
17

  
18
	private MailLibrary mailer = null;
19

  
20
	public void sendMail(List<String> recipients, String subject, String message, boolean sendToSpecial, List<String> repoAdminMails) throws Exception {
21

  
22
		try {
23
			if (sendToSpecial) {
24
				recipients.addAll(this.specialRecipients);
25
			}
26

  
27
			if (repoAdminMails != null)
28
				recipients.addAll(repoAdminMails);
29

  
30
			if (this.override) {
31
				recipients.clear();
32
				recipients.add(overrideEmail);
33
			}
34

  
35
			logger.debug("Sending mail to Recipients: " + recipients + " Subject: " + subject + " Message: " + message);
36
			if (!logonly)
37
				mailer.sendEmail(recipients.toArray(new String[] {}), subject, message);
38
		} catch (Exception e) {
39
			logger.error("Error sending mail to Recipients: " + recipients + " Subject: " + subject + " Message: " + message, e);
40
			throw new Exception(e);
41
		}
42
	}
43

  
44
	public void setSpecialRecipients(String specialRecipients) {
45
		String[] recps = specialRecipients.split(",");
46

  
47
		for (String recp : recps) {
48
			recp = recp.trim();
49

  
50
			this.specialRecipients.add(recp);
51
		}
52
	}
53

  
54
	public void setOverride(boolean override) {
55
		this.override = override;
56
	}
57

  
58
	public void setOverrideEmail(String overrideEmail) {
59
		this.overrideEmail = overrideEmail;
60
	}
61

  
62
	public void setMailer(MailLibrary mailer) {
63
		this.mailer = mailer;
64
	}
65

  
66
	public String getFrom() {
67
		return from;
68
	}
69

  
70
	public void setFrom(String from) {
71
		this.from = from;
72
	}
73

  
74
	public boolean isLogonly() {
75
		return logonly;
76
	}
77

  
78
	public void setLogonly(boolean logonly) {
79
		this.logonly = logonly;
80
	}
81

  
82
}
modules/uoa-validator-service/trunk/src/main/java/eu/dnetlib/validator/service/email/BugReporter.java
1
package eu.dnetlib.validator.service.email;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5

  
6
import org.apache.log4j.Logger;
7

  
8

  
9
public class BugReporter {
10

  
11
	private transient Logger logger = Logger.getLogger(BugReporter.class);
12
	
13
	private String ex = null;
14

  
15
	public void report() {
16
		List<String> recipients = new ArrayList<String>();
17
		try {
18
			recipients.add("nikonas@di.uoa.gr");
19
			String message = "An exception has occurred:\n"+ex;
20
			String subject = "Automatic Bug Report";
21
//			this.getEmailer().sendMail(recipients, subject, message, false, null);
22
		} catch (Exception e) {
23
			logger.error("error sending error report", e);
24
		}
25
	}
26

  
27
	public void setEx(String ex) {
28
		this.ex = ex;
29
	}
30

  
31
	public String getEx() {
32
		return ex;
33
	}
34
	
35
	
36

  
37
}
modules/uoa-validator-service/trunk/src/main/java/eu/dnetlib/validator/service/dao/DAO.java
1
package eu.dnetlib.validator.service.dao;
2

  
3
public interface DAO<T> {
4

  
5
	public Integer save (T t);
6
//	public String delete (T t);
7
	public String delete (String id);
8
	public T get (String id);
9
}
modules/uoa-validator-service/trunk/src/main/java/eu/dnetlib/validator/service/dao/tasks/TaskStored.java
1
package eu.dnetlib.validator.service.dao.tasks;
2

  
3

  
4
public class TaskStored {
5

  
6
	private String status, started, ended, jobId, ruleId, valObjId, recordIdentifier, recordUrl;
7
	private boolean success;
8
//	private RuleD rule;
9
	
10
	public String getRecordUrl() {
11
		return recordUrl;
12
	}
13
	public void setRecordUrl(String recordUrl) {
14
		this.recordUrl = recordUrl;
15
	}
16
	public String getStatus() { 
17
		return status;
18
	}
19
	public void setStatus(String status) {
20
		this.status = status;
21
	}
22
	public boolean getSuccess() {
23
		return success;
24
	}
25
	public void setSuccess(boolean success) {
26
		this.success = success;
27
	}
28
	public String getStarted() {
29
		return started;
30
	}
31
	public void setStarted(String started) {
32
		this.started = started;
33
	}
34
	public String getEnded() {
35
		return ended;
36
	}
37
	public void setEnded(String ended) {
38
		this.ended = ended;
39
	}
40
	public String getJobId() {
41
		return jobId;
42
	}
43
	public void setJobId(String jobId) {
44
		this.jobId = jobId;
45
	}
46
	public String getRuleId() {
47
		return ruleId;
48
	}
49
	public void setRuleId(String ruleId) {
50
		this.ruleId = ruleId;
51
	}
52
	
53
	public String getValObjId() {
54
		return valObjId;
55
	}
56
	public void setValObjId(String valObjId) {
57
		this.valObjId = valObjId;
58
	}
59
	public String getRecordIdentifier() {
60
		return recordIdentifier;
61
	}
62
	public void setRecordIdentifier(String recordIdentifier) {
63
		this.recordIdentifier = recordIdentifier;
64
	}
65
//	public RuleD getRule() {
66
//		return rule;
67
//	}
68
//	public void setRule(RuleD rule) {
69
//		this.rule = rule;
70
//	}
71

  
72
	
73
	
74
}
modules/uoa-validator-service/trunk/src/main/java/eu/dnetlib/validator/service/dao/tasks/TaskStoredDAO.java
1
package eu.dnetlib.validator.service.dao.tasks;
2

  
3
import eu.dnetlib.validator.service.dao.DAO;
4
import eu.dnetlib.validator.service.dao.rules.RuleStatus;
5

  
6
import java.util.List;
7
import java.util.Map;
8

  
9
public interface TaskStoredDAO extends DAO<TaskStored> {
10

  
11
	public List<TaskStored> getTasksOfJob(String id);
12

  
13
	public List<String> getValidationErrors(String jobId, String ruleId);
14

  
15
	public List<String> getDistinctTasksOfJob(String jobId);
16

  
17
	public List<TaskStored> getFinishedTasks(String jobId, String ruleId);
18

  
19
	public void saveTasks(List<TaskStored> tasksStored, List<String> sets);
20
	
21
	public void cleanTasks(int jobId);
22

  
23
	public void saveTasksBatch(List<TaskStored> tasks, Map<String, List<String>> groupByMap);
24

  
25
	public void saveTasks(Map<String, RuleStatus> scoreMapPerRule);
26
}
modules/uoa-validator-service/trunk/src/main/java/eu/dnetlib/validator/service/dao/tasks/TaskStoredDAOimpl.java
1
package eu.dnetlib.validator.service.dao.tasks;
2

  
3
import eu.dnetlib.validator.service.dao.AbstractDAO;
4
import eu.dnetlib.validator.service.dao.rules.RuleStatus;
5

  
6
import java.sql.Connection;
7
import java.sql.PreparedStatement;
8
import java.sql.ResultSet;
9
import java.sql.SQLException;
10
import java.util.ArrayList;
11
import java.util.List;
12
import java.util.Map;
13
import java.util.Map.Entry;
14

  
15
public class TaskStoredDAOimpl extends AbstractDAO<TaskStored> implements TaskStoredDAO{
16

  
17
	@Override
18
	protected PreparedStatement getUpdateStatement(TaskStored t, Connection con)
19
			throws SQLException {
20
		String query="UPDATE tasks set status=?, success=?, started=?, ended=?, record_url=? WHERE job_id=? AND rule_id=? AND record_identifier=?";
21
		PreparedStatement stmt = con.prepareStatement(query);
22
//		logger.debug("getting taskStored updateStatement");
23
		stmt.setString(1, t.getStatus());
24
		stmt.setBoolean(2, t.getSuccess());
25
		stmt.setString(3, t.getStarted());
26
		stmt.setString(4, t.getEnded());
27
		stmt.setString(5, t.getRecordUrl());	
28
		stmt.setInt(6, Integer.parseInt(t.getJobId()));
29
		stmt.setInt(7, Integer.parseInt(t.getRuleId()));
30
		stmt.setString(8, t.getRecordIdentifier());
31
		return stmt;
32
	}
33

  
34
	@Override
35
	protected PreparedStatement getInsertStatement(TaskStored t, Connection con) throws SQLException {
36
		String query="INSERT INTO tasks(status, success, started, ended, job_id, rule_id, record_identifier, record_url) VALUES(?,?,?,?,?,?,?,?)";
37
		PreparedStatement stmt = con.prepareStatement(query);
38
//		logger.debug("getting taskStored insertStatement");
39
		stmt.setString(1, t.getStatus());
40
		stmt.setBoolean(2, t.getSuccess());
41
		stmt.setString(3, t.getStarted());
42
		stmt.setString(4, t.getEnded());
43
		stmt.setInt(5, Integer.parseInt(t.getJobId()));
44
		stmt.setInt(6, Integer.parseInt(t.getRuleId()));
45
		stmt.setString(7, t.getRecordIdentifier());
46
		stmt.setString(8, t.getRecordUrl());		
47
	
48
		return stmt;
49
	}
50

  
51
	@Override
52
	protected PreparedStatement getDeleteStatement(String id, Connection con)
53
			throws SQLException {
54
		String query="DELETE FROM tasks WHERE job_id=?";
55
		PreparedStatement stmt = con.prepareStatement(query);
56
		stmt.setInt(1, Integer.parseInt(id));
57
		return stmt;
58
	}
59

  
60

  
61
	@Override
62
	public List<TaskStored> getTasksOfJob(String id) {
63
		ResultSet rs = null;
64
		Connection con = null;
65
		PreparedStatement stmt = null;
66
		TaskStored retTask = null;
67
		List<TaskStored> retList = null; 
68
		logger.debug("Accessing DB to get all Tasks of Job");
69
		try {
70
			con = getConnection();
71
			String query="SELECT status, success, started, ended, rule_id, record_identifier, record_url FROM tasks WHERE job_id=?";
72
			stmt = con.prepareStatement(query);
73
			stmt.setString(1, id);
74
			rs = stmt.executeQuery();
75
			if (rs!=null){
76
				retList = new ArrayList<TaskStored>();
77
				
78
				while (rs.next()) {
79
					retTask = new TaskStored();
80
					retTask.setStatus(rs.getString(1));
81
					retTask.setSuccess(rs.getBoolean(2));
82
					retTask.setStarted(rs.getString(3));
83
					retTask.setEnded(rs.getString(4));
84
					retTask.setRuleId(Integer.toString(rs.getInt(5)));
85
					retTask.setRecordIdentifier(rs.getString(6));
86
					retTask.setRecordUrl(rs.getString(7));
87
					retTask.setJobId(id);
88
					retList.add(retTask);
89
				}				
90
			}
91
		} catch (SQLException e) {
92
			logger.error("Accessing DB to get all Tasks of Job: "+e);
93
		} finally {
94
			if (stmt != null) {
95
				try {
96
					stmt.close();
97
				} catch (SQLException e) {
98
					logger.error("Accessing DB to get all Tasks of Job: "+e);
99
				}
100
			}
101
		}
102
		return retList;
103

  
104
	}
105
	
106
	@Override
107
	public TaskStored get(String id) {
108
		// TODO Auto-generated method stub
109
		return null;
110
	}
111

  
112
	@Override
113
	public List<String> getValidationErrors(String jobId, String ruleId) {
114
		ResultSet rs = null;
115
		Connection con = null;
116
		PreparedStatement stmt = null;
117
		List<String> retList = null; 
118
		logger.debug("Accessing DB to get Validation Errors of JobId " + jobId + " and RuleId " + ruleId);
119
		try {
120
			con = getConnection();
121
			String query="SELECT record_identifier FROM tasks WHERE job_id=? AND rule_id=? AND success=? LIMIT 30";
122
			stmt = con.prepareStatement(query);
123
			stmt.setInt(1, Integer.parseInt(jobId));
124
			stmt.setInt(2, Integer.parseInt(ruleId));
125
			stmt.setBoolean(3, false);
126
			rs = stmt.executeQuery();
127
			if (rs!=null){
128
				retList = new ArrayList<String>();
129
				
130
				while (rs.next()) {
131
//					if (!rs.getBoolean(1))
132
					retList.add(rs.getString(1));
133
				}				
134
			}
135
		} catch (SQLException e) {
136
			logger.error("Accessing DB to get Validation Errors of a JobId and RuleId: "+e);
137
		} finally {
138
			if (stmt != null) {
139
				try {
140
					stmt.close();
141
				} catch (SQLException e) {
142
					logger.error("Accessing DB to get Validation Errors of a JobId and RuleId: "+e);
143
				}
144
			}
145
		}
146
		return retList;
147

  
148

  
149
	}
150

  
151
	@Override
152
	public List<String> getDistinctTasksOfJob(String jobId) {
153
		List<String> retList = null;
154
		ResultSet rs = null;
155
		Connection con = null;
156
		PreparedStatement stmt = null;
157
		logger.debug("Accessing DB to get Distinct Rule ids of Tasks");
158
		try {
159
			con = getConnection();
160
			String query="SELECT distinct rule_id from tasks where job_id=?";
161
			stmt = con.prepareStatement(query);
162
			stmt.setInt(1, Integer.parseInt(jobId));
163
			rs = stmt.executeQuery();
164
			if (rs!=null){
165
				retList = new ArrayList<String>();
166
				
167
				while (rs.next()) {
168
					retList.add(Integer.toString(rs.getInt(1)));
169
				}				
170
			}
171
		} catch (SQLException e) {
172
			logger.error("Accessing DB to get Distinct Rule ids of Tasks: "+e);
173
		} finally {
174
			if (stmt != null) {
175
				try {
176
					stmt.close();
177
				} catch (SQLException e) {
178
					logger.error("Accessing DB to get Distinct Rule ids of Tasks: "+e);
179
				}
180
			}
181
		}
182
		return retList;
183

  
184
		
185
	}
186

  
187
	@Override
188
	public List<TaskStored> getFinishedTasks(String jobId, String ruleId) {
189
		ResultSet rs = null;
190
		Connection con = null;
191
		PreparedStatement stmt = null;
192
		TaskStored retTask = null;
193
		List<TaskStored> retList = null; 
194
		logger.debug("Accessing DB to get Finished Tasks");
195
		try {
196
			con = getConnection();
197
			String query="SELECT success, record_identifier FROM tasks WHERE job_id=? AND rule_id=? AND status=?";
198
			stmt = con.prepareStatement(query);
199
			stmt.setInt(1, Integer.parseInt(jobId));
200
			stmt.setInt(2,Integer.parseInt(ruleId));
201
			stmt.setString(3, "finished");
202
			rs = stmt.executeQuery();
203
			if (rs!=null){
204
				retList = new ArrayList<TaskStored>();
205
				
206
				while (rs.next()) {
207
					retTask = new TaskStored();
208
					retTask.setSuccess(rs.getBoolean(1));
209
					retTask.setRecordIdentifier(rs.getString(2));
210
					retList.add(retTask);
211
				}				
212
			}
213
		} catch (SQLException e) {
214
			logger.error("Accessing DB to get Finished Tasks: "+e);
215
		} finally {
216
			if (stmt != null) {
217
				try {
218
					stmt.close();
219
				} catch (SQLException e) {
220
					logger.error("Accessing DB to get Finished Tasks: "+e);
221
				}
222
			}
223
		}
224
		return retList;
225

  
226

  
227
	}
228

  
229
	@Override
230
	public void saveTasksBatch(List<TaskStored> tasks, Map<String,List<String>> groupByMap) {
231
		Connection con = null;
232
		PreparedStatement stmt = null, stmt1 = null;
233
		logger.debug("Accessing DB to save batch of tasks");
234
		try {
235
			
236
			con = getConnection();
237
			String query="INSERT INTO tasks(status, success, started, ended, job_id, rule_id, record_identifier, record_url) VALUES(?,?,?,?,?,?,?,?)";stmt = con.prepareStatement(query);
238
			stmt = con.prepareStatement(query);
239
						
240
			for (TaskStored t : tasks ) {
241
				stmt.setString(1, t.getStatus());
242
				stmt.setBoolean(2, t.getSuccess());
243
				stmt.setString(3, t.getStarted());
244
				stmt.setString(4, t.getEnded());
245
				stmt.setInt(5, Integer.parseInt(t.getJobId()));
246
				stmt.setInt(6, Integer.parseInt(t.getRuleId()));
247
				stmt.setString(7, t.getRecordIdentifier());
248
				stmt.setString(8, t.getRecordUrl());	
249
				stmt.addBatch();
250
		    }
251
		    stmt.executeBatch();
252
		    logger.debug("Tasks inserted: "+tasks.size());
253

  
254
		    if (!groupByMap.isEmpty()) {
255
		    	logger.debug("Inserting record's groupBy values..");
256
		    	for (Map.Entry<String, List<String>> entry : groupByMap.entrySet()) {
257
			    	query="INSERT INTO record_groupby(record_id, groupby, job_id) VALUES(?,?,?)";
258
			    	stmt1 = con.prepareStatement(query);
259
			    	for (String value :entry.getValue()) {
260
			    		stmt1.setString(1, entry.getKey());
261
			    		stmt1.setString(2, value);
262
			    		stmt1.setInt(3, Integer.parseInt(tasks.get(0).getJobId()));		
263
			    		stmt1.addBatch();
264
			    	}
265
		    	}
266
		    	stmt1.executeBatch();
267
//		    	logger.debug("groupBy values inserted: "+groupBy_values.size());		    	
268
		    }
269
		    
270
		} catch (SQLException e) {
271
			logger.error("Error Accessing DB to save batch of tasks"+e);
272
		} finally {
273
			if (stmt != null) {
274
				try {
275
					stmt.close();
276
				} catch (SQLException e) {
277
					logger.error("Accessing DB to save batch of tasks"+e);
278
				}
279
			}
280
			if (stmt1 != null) {
281
				try {
282
					stmt1.close();
283
				} catch (SQLException e) {
284
					logger.error("Accessing DB to save batch of tasks"+e);
285
				}
286
			}			
287
		}
288
		
289
	}
290

  
291
	@Override
292
	public void saveTasks(List<TaskStored> tasks, List<String> groupBy_values) {
293
		Connection con = null;
294
		PreparedStatement stmt = null, stmt1 = null;
295
		logger.debug("Accessing DB to save batch of tasks");
296
		try {
297
			
298
			con = getConnection();
299
			String query="INSERT INTO tasks(status, success, started, ended, job_id, rule_id, record_identifier, record_url) VALUES(?,?,?,?,?,?,?,?)";stmt = con.prepareStatement(query);
300
			stmt = con.prepareStatement(query);
301
						
302
			for (TaskStored t : tasks ) {
303
				stmt.setString(1, t.getStatus());
304
				stmt.setBoolean(2, t.getSuccess());
305
				stmt.setString(3, t.getStarted());
306
				stmt.setString(4, t.getEnded());
307
				stmt.setInt(5, Integer.parseInt(t.getJobId()));
308
				stmt.setInt(6, Integer.parseInt(t.getRuleId()));
309
				stmt.setString(7, t.getRecordIdentifier());
310
				stmt.setString(8, t.getRecordUrl());	
311
				stmt.addBatch();
312
		    }
313
		    stmt.executeBatch();
314
		    logger.debug("Tasks inserted: "+tasks.size());
315

  
316
		    if (groupBy_values != null) {
317
		    	logger.debug("Inserting record's groupBy values..");
318
		    	query="INSERT INTO record_groupby(record_id, groupby, job_id) VALUES(?,?,?)";
319
		    	stmt1 = con.prepareStatement(query);
320
		    	for (String value : groupBy_values) {
321
		    		stmt1.setString(1, tasks.get(0).getRecordIdentifier());
322
		    		stmt1.setString(2, value);
323
		    		stmt1.setInt(3, Integer.parseInt(tasks.get(0).getJobId()));		
324
		    		stmt1.addBatch();
325
		    	}
326
		    	stmt1.executeBatch();
327
		    	logger.debug("groupBy values inserted: "+groupBy_values.size());		    	
328
		    }
329
		    
330
		} catch (SQLException e) {
331
			logger.error("Error Accessing DB to save batch of tasks"+e);
332
		} finally {
333
			if (stmt != null) {
334
				try {
335
					stmt.close();
336
				} catch (SQLException e) {
337
					logger.error("Accessing DB to save batch of tasks"+e);
338
				}
339
			}
340
			if (stmt1 != null) {
341
				try {
342
					stmt1.close();
343
				} catch (SQLException e) {
344
					logger.error("Accessing DB to save batch of tasks"+e);
345
				}
346
			}			
347
		}
348
		
349
	}
350
	
351
	@Override
352
	public void saveTasks(Map<String, RuleStatus> scoreMapPerRule) {
353
		Connection con = null;
354
		PreparedStatement stmt = null;
355
		logger.debug("Accessing DB to save batch of failed tasks");
356
		try {
357
			
358
			con = getConnection();
359
			String query="INSERT INTO tasks(status, success, started, ended, job_id, rule_id, record_identifier, record_url) VALUES(?,?,?,?,?,?,?,?)";stmt = con.prepareStatement(query);
360
			stmt = con.prepareStatement(query);
361
			
362
			for (Entry<String, RuleStatus> entry : scoreMapPerRule.entrySet()) {
363
				for (TaskStored t : entry.getValue().getFailedTasks() ) {
364
					stmt.setString(1, t.getStatus());
365
					stmt.setBoolean(2, t.getSuccess());
366
					stmt.setString(3, t.getStarted());
367
					stmt.setString(4, t.getEnded());
368
					stmt.setInt(5, Integer.parseInt(t.getJobId()));
369
					stmt.setInt(6, Integer.parseInt(t.getRuleId()));
370
					stmt.setString(7, t.getRecordIdentifier());
371
					stmt.setString(8, t.getRecordUrl());	
372
					stmt.addBatch();
373
				}
374
			}
375
		    int result = stmt.executeBatch().length;
376
		    logger.debug("Tasks inserted: "+ result);
377

  
378
		} catch (SQLException e) {
379
			logger.error("Error Accessing DB to save batch of failed tasks"+e);
380
		} finally {
381
			if (stmt != null) {
382
				try {
383
					stmt.close();
384
				} catch (SQLException e) {
385
					logger.error("Accessing DB to save batch of failed tasks"+e);
386
				}
387
			}
388
		}
389
		
390
	}
391

  
392
	
393
	@Override
394
	protected int getLastId() throws SQLException {
395
		return 1;
396
//		ResultSet rs = null;
397
//		Connection con = null;
398
//		PreparedStatement stmt = null;
399
//		int retId = -1;
400
//		logger.debug("Accessing DB to get Task's next available id");
401
//		try {
402
//			con = getConnection();
403
//			String query="SELECT currval(pg_get_serial_sequence(?,?)) FROM tasks";
404
//			stmt = con.prepareStatement(query);
405
//			stmt.setString(1, "tasks");
406
//			stmt.setString(2, "rule_id");
407
//			
408
//			rs = stmt.executeQuery();
409
//			if (rs!=null){
410
//				rs.next();
411
//				retId=rs.getInt(1);
412
//			}
413
//
414
//
415
//		} catch (SQLException e) {
416
//			logger.error("Error while accessing DB to get Task's next available id: "+e);
417
//		} finally {
418
//			if (stmt != null) {
419
//				try {
420
//					stmt.close();
421
//				} catch (SQLException e) {
422
//					logger.error("Error while accessing DB to get Task's next available id: "+e);
423
//				}
424
//			}
425
//		}
426
//		return retId;
427
	}
428

  
429
	@Override
430
	public void cleanTasks(int jobId) {
431
		Connection con = null;
432
		PreparedStatement stmt = null;
433
		logger.debug("Accessing DB to delete unneeded tasks");
434
		try {
435
			con = getConnection();
436
			String query="DELETE FROM tasks WHERE job_id = ? AND success = ?";
437
			stmt = con.prepareStatement(query);
438
			stmt.setInt(1, jobId);
439
			stmt.setBoolean(2, true);
440
			stmt.executeUpdate();
441
			stmt.close();
442
		} catch (SQLException e) {
443
			logger.error("Error while Accessing DB to delete unneeded tasks: "+e);
444
		} finally {
445
			if (stmt != null) {
446
				try {
447
					stmt.close();
448
				} catch (SQLException e) {
449
					logger.error("Error while Accessing DB to delete unneeded tasks: "+e);
450
				}
451
			}
452
		}
453

  
454
	}
455

  
456
}
modules/uoa-validator-service/trunk/src/main/java/eu/dnetlib/validator/service/dao/repositories/RepositoryStoredDAO.java
1
package eu.dnetlib.validator.service.dao.repositories;
2

  
3
import eu.dnetlib.validator.service.dao.DAO;
4

  
5
import java.util.List;
6

  
7
public interface RepositoryStoredDAO extends DAO<RepositoryStored> {
8

  
9
	public List<String> getBaseUrls();
10
	
11
	
12

  
13
}
modules/uoa-validator-service/trunk/src/main/java/eu/dnetlib/validator/service/dao/repositories/RepositoryStoredDAOImpl.java
1
package eu.dnetlib.validator.service.dao.repositories;
2

  
3
import eu.dnetlib.validator.service.dao.AbstractDAO;
4

  
5
import java.sql.Connection;
6
import java.sql.PreparedStatement;
7
import java.sql.ResultSet;
8
import java.sql.SQLException;
9
import java.util.ArrayList;
10
import java.util.List;
11

  
12
public class RepositoryStoredDAOImpl extends AbstractDAO<RepositoryStored> implements RepositoryStoredDAO {
13

  
14
	@Override
15
	public List<String> getBaseUrls() {
16
		ResultSet rs = null;
17
		Connection con = null;
18
		PreparedStatement stmt = null;
19
		List<String> retList = null;
20
		logger.debug("Accessing DB to get all activated Repositories Stored");
21
		try {
22
			con = getConnection();
23
			String query="SELECT base_url FROM repositories WHERE activation_id is null";
24
			stmt = con.prepareStatement(query);
25
			rs = stmt.executeQuery();
26
			if (rs!=null){
27
				retList = new ArrayList<String>();				
28
				while (rs.next()) {
29
					retList.add(rs.getString(1));
30
				}				
31
			}
32

  
33
		} catch (SQLException e) {
34
			logger.error("Error while accessing DB to get all activated Repositories Stored: "+e);
35
		} finally {
36
			if (stmt != null) {
37
				try {
38
					stmt.close();
39
				} catch (SQLException e) {
40
					logger.error("Error while accessing DB to get all activated Repositories Stored: "+e);
41
				}
42
			}
43
		}
44
		return retList;
45

  
46
		
47
	}
48
	
49
	@Override
50
	protected PreparedStatement getUpdateStatement(RepositoryStored t,
51
			Connection con) throws SQLException {
52
		String query="UPDATE repositories SET activation_id=? WHERE activation_id=?";
53
		PreparedStatement stmt = con.prepareStatement(query);
54
		stmt.setString(1, null);
55
		stmt.setString(2, t.getActivationId());
56
		return stmt;
57
	}
58

  
59
	@Override
60
	protected PreparedStatement getInsertStatement(RepositoryStored t,
61
			Connection con) throws SQLException {
62
		String query="INSERT INTO repositories(base_url,activation_id) VALUES(?,?)";
63
		PreparedStatement stmt = con.prepareStatement(query);
64
		stmt.setString(1, t.getBaseUrl());
65
		stmt.setString(2, t.getBaseUrl());
66
		return stmt;
67
	}
68

  
69
	@Override
70
	protected PreparedStatement getDeleteStatement(String id, Connection con)
71
			throws SQLException {
72
		// TODO Auto-generated method stub
73
		return null;
74
	}
75

  
76
	@Override
77
	protected int getLastId() throws SQLException {
78
		// TODO Auto-generated method stub
79
		return 0;
80
	}
81

  
82
	@Override
83
	public RepositoryStored get(String id) {
84
		// TODO Auto-generated method stub
85
		return null;
86
	}
87

  
88

  
89
}
modules/uoa-validator-service/trunk/src/main/java/eu/dnetlib/validator/service/dao/repositories/RepositoryStored.java
1
package eu.dnetlib.validator.service.dao.repositories;
2

  
3
/**
4
 * 
5
 * @author Nikon Gasparis
6
 *
7
 */
8
public class RepositoryStored {
9
	
10
	private String baseUrl;
11
	private String activationId;
12
	
13
	
14
	public String getBaseUrl() {
15
		return baseUrl;
16
	}
17
	public void setBaseUrl(String baseUrl) {
18
		this.baseUrl = baseUrl;
19
	}
20
	public String getActivationId() {
21
		return activationId;
22
	}
23
	public void setActivationId(String activationId) {
24
		this.activationId = activationId;
25
	}
26
	
27
	
28
	
29

  
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff