Project

General

Profile

1
package eu.dnetlib.validator.service.impl;
2

    
3
import eu.dnetlib.domain.functionality.validator.JobForValidation;
4
import eu.dnetlib.domain.functionality.validator.RuleSet;
5
import eu.dnetlib.domain.functionality.validator.StoredJob;
6
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
7
import eu.dnetlib.enabling.tools.blackboard.BlackboardNotificationHandler;
8
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
9
import eu.dnetlib.validator.commons.dao.DaoException;
10
import eu.dnetlib.validator.commons.dao.jobs.JobsDAO;
11
import eu.dnetlib.validator.commons.dao.rules.RulesDAO;
12
import eu.dnetlib.validator.commons.dao.rules.RulesetsDAO;
13
import eu.dnetlib.validator.engine.Validator;
14
import eu.dnetlib.validator.engine.ValidatorException;
15
import eu.dnetlib.validator.engine.data.Rule;
16
import eu.dnetlib.validator.engine.execution.Job;
17
import eu.dnetlib.validator.service.impls.ValidatorRestore;
18
import eu.dnetlib.validator.service.impls.listeners.*;
19
import eu.dnetlib.validator.service.impls.providers.DnetProvider;
20
import eu.dnetlib.validator.service.impls.providers.OAIPMHRecordProvider;
21
import eu.dnetlib.validator.service.impls.providers.OAIPMHSinglePageVerbProvider;
22
import eu.dnetlib.validator.service.impls.rules.ChainRule;
23
import eu.dnetlib.validator.service.impls.rules.RuleTypes;
24
import org.apache.log4j.Logger;
25
import org.springframework.transaction.annotation.Propagation;
26
import org.springframework.transaction.annotation.Transactional;
27

    
28
import java.util.*;
29

    
30
@Transactional
31
public class ValidatorManagerImpl implements ValidatorManager {
32

    
33
	private Validator validator;
34
	private JobsDAO jobsDao;
35
	private RulesetsDAO rulesetsDao;
36
	private RulesDAO rulesDao;
37
	private ValidatorRestore valRestore;
38
	
39
	
40
	private static Logger logger = Logger.getLogger(ValidatorManagerImpl.class);
41

    
42
	private ListenersManager listenersManager;
43
//	this.restartJobs();
44
	public void start() {
45
		logger.info("Initializing Validator Manager module");
46
		if (valRestore.isAutoRestoreOnStartup()) {
47
			logger.info("auto-restoring OpenAire Validator is enabled..");
48
			List<StoredJob> jobs = valRestore.deleteUncompleted();
49
			valRestore.restartJobs(jobs);
50
			logger.info("finished restoring OpenAire Validator..");
51
		} else {
52
			logger.info("auto-restoring OpenAire Validator is disabled..");
53
		}
54
	}
55
	
56
	public StoredJob getStoredJob(int jobId, String groupBy)
57
			throws ValidatorException {
58
		try {
59
			logger.info("Getting job summary for job " + jobId +" with groupBy: "+groupBy);
60
			return jobsDao.getJobSummary(jobId,groupBy);
61
		} catch (Exception e) {
62
			logger.error("error getting job summary for job " + jobId, e);
63
			throw new ValidatorException(e);
64
		}
65
	}
66
	
67
	public List<StoredJob> getStoredJobs(String userMail, String jobType,
68
			Integer offset, Integer limit, String dateFrom, String dateTo)
69
			throws ValidatorException {
70
		return this.getStoredJobs(userMail, jobType, offset, limit, dateFrom, dateTo, null);
71

    
72
	}
73

    
74
	public List<StoredJob> getStoredJobs(String userMail, String jobType,
75
										 Integer offset, Integer limit, String dateFrom, String dateTo, String jobStatus)
76
			throws ValidatorException {
77
		try {
78
			logger.debug("Getting jobs of user " + userMail);
79
			return jobsDao.getJobs(userMail, jobType, offset, limit, dateFrom, dateTo, jobStatus);
80
		} catch (Exception e) {
81
			logger.error("error Getting jobs of user " + userMail, e);
82
			throw new ValidatorException(e);
83
		}
84
	}
85

    
86
	public int getStoredJobsTotalNumber(String userMail, String jobType)
87
			throws ValidatorException {
88
		return this.getStoredJobsTotalNumber(userMail, jobType, null);
89
	}
90

    
91
	public int getStoredJobsTotalNumber(String userMail, String jobType, String jobStatus)
92
			throws ValidatorException {
93
		try {
94
			logger.debug("Getting jobs total sum of user " + userMail);
95
			return jobsDao.getJobsTotalNumber(userMail, jobType, jobStatus);
96
		} catch (Exception e) {
97
			logger.error("error Getting jobs sum of user " + userMail, e);
98
			throw new ValidatorException(e);
99
		}
100
	}
101
	
102
	public List<RuleSet> getRuleSets() throws ValidatorException {
103
		try {
104
			logger.info("Getting rulesets");
105
			return rulesetsDao.getRuleSets();
106
		} catch (Exception e) {
107
			logger.error("error Getting rulesets ", e);
108
			throw new ValidatorException(e);
109
		}
110
	}
111

    
112
	@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
113
	public StoredJob beginDataJobForWorkflow(String mdstoreId, String guidelines, String groupBy, int records, int workers, BlackboardJob bJob, BlackboardNotificationHandler<BlackboardServerHandler> blackboardHandler, int jobStatusUpdateInterval, boolean outputEpr, boolean blacklistedRecords, String blacklistGuidelines) throws ValidatorException{
114
		try {
115
			logger.info("Submitting data job for workflow");
116
//			String desiredCompatibility = "openaire3.0";
117
			Set<Integer> ruleIdsForBlacklist = new HashSet<Integer>();
118
			Set<Integer> ruleIdsContent = new HashSet<Integer>();
119
			for (RuleSet ruleset : rulesetsDao.getRuleSets()) {
120
				if (ruleset.getGuidelinesAcronym().equals(guidelines)) {
121
					ruleIdsContent = ruleset.getContentRulesIds();
122
				}	
123
				if (blacklistedRecords && ruleset.getGuidelinesAcronym().equals(blacklistGuidelines)) {
124
					ruleIdsForBlacklist = ruleset.getContentRulesIds();
125
					ruleIdsContent.addAll(ruleIdsForBlacklist);
126
				}
127
			}
128
			
129
			Properties props = new Properties();
130

    
131
			props.setProperty(DnetProvider.MDSTORE_ID, mdstoreId);
132
			props.setProperty(DnetProvider.BATCH_SIZE, "50");
133
			if (bJob.getParameters().get("batchSize") != null )
134
				props.setProperty(DnetProvider.BATCH_SIZE, bJob.getParameters().get("batchSize"));
135
			
136
			props.setProperty(DnetProvider.RECORDS, Integer.toString(records));
137
			
138
			StoredJob newJob = new StoredJob();
139
			newJob.setUserEmail("Workflow Service");
140
			newJob.setValidationType("C");
141
			newJob.setDesiredCompatibilityLevel(guidelines);
142
			newJob.setContentJobStatus("ongoing");
143
			newJob.setUsageJobStatus("none");
144
			newJob.setJobType("Workflow Request");
145
			newJob.setDuration("--");
146
			newJob.setBaseUrl(mdstoreId);
147
			newJob.setRules(ruleIdsContent);
148
			newJob.setRecords(records);
149
			newJob.setValidationSet("dnet-workflow");
150
			newJob.setGroupByXpath(groupBy);
151
			newJob.setMetadataPrefix("oai_dc");
152
			newJob.setId(-1);
153
	
154
			int jobIdStored = jobsDao.save(newJob);
155
					
156
			Set<Rule> rulesContent = new HashSet<Rule>();
157
			
158
			logger.debug("Selected content rules number: " + ruleIdsContent.size());
159
			for (Integer ruleId : ruleIdsContent){
160
				
161
				eu.dnetlib.domain.functionality.validator.Rule tempRule=rulesDao.get(ruleId);
162
				
163
				//special behaviour type of rule is chain
164
				if(tempRule.getType().equals("ChainRule")) {
165
					ChainRule<Rule> chainRule = this.handleChain(tempRule);
166
					rulesContent.add(chainRule);
167
				}
168
				else {
169
					rulesContent.add((Rule) this.getRuleClassInstanceByType(tempRule.getType(), tempRule.getConfiguration(), tempRule.getId()));
170
				}
171
			}
172
			
173
			Job jobContent = new Job(jobIdStored, 3, rulesContent, props);
174
			
175
			ValidatorJobListener listenerContent = listenersManager.createListener();
176
			listenerContent.setJobSubmittedId(jobIdStored);
177
			listenerContent.setJobSubmittedUser("Workflow Service");
178
			listenerContent.setGroupBy_xpath(groupBy);
179
			listenerContent.setValidationType("content");
180
			listenerContent.setInternalJobsSum(workers);
181
			listenerContent.setBlacklistRuleIds(ruleIdsForBlacklist);
182

    
183
			DnetListener dnetListener = listenersManager.createDnetListener();
184
			dnetListener.setJob(bJob);
185
			dnetListener.setBlackboardHandler(blackboardHandler);
186
			dnetListener.setInternalJobsSum(workers);
187
			dnetListener.setValidationJobId(jobIdStored);
188
			dnetListener.setJobStatusUpdateInterval(jobStatusUpdateInterval);
189
			if (blacklistedRecords) {
190
				dnetListener.setEnableOutputToDisk(true);
191
				
192
			}
193
			if (outputEpr)
194
				dnetListener.setEnableOutputToRS(true);
195

    
196
			validator.submitJob(jobContent, workers, listenerContent, dnetListener);
197
				
198
			return newJob;
199
			
200
			
201
		} catch (Exception e) {
202
			logger.error("Error Submitting content job", e);
203
			throw new ValidatorException(e);
204
		}
205
	}
206
	
207
	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
208
	public void submitJob(JobForValidation job) throws ValidatorException {
209

    
210
		try {
211
			logger.info("Submiting validation job requested by user: " + job.getUserEmail());
212

    
213
			if (job.isRegistration()) {
214
				logger.debug("initiating preregistration validations on repo " + job.getBaseUrl() + " for user " + job.getUserEmail() + "and desired compatibility: " + job.getDesiredCompatibilityLevel());
215
				for (RuleSet ruleset : rulesetsDao.getRuleSets()) {
216
					if (ruleset.getGuidelinesAcronym().equals(job.getDesiredCompatibilityLevel())) {
217
						job.setSelectedContentRules(ruleset.getContentRulesIds());
218
						job.setSelectedUsageRules(ruleset.getUsageRulesIds());
219
					}	
220
				}	
221
			}
222
			
223
			if ( job.getDesiredCompatibilityLevel().equalsIgnoreCase("openaire2.0") || 
224
					job.getDesiredCompatibilityLevel().equalsIgnoreCase("openaire3.0") || 
225
					job.getDesiredCompatibilityLevel().equalsIgnoreCase("driver") ) {
226
				logger.debug("Chosen set: OpenAIRE For Literature Repositories");
227
				logger.debug("Setting METADATA_PREFIX to: oai_dc");
228
				job.setMetadataPrefix("oai_dc");
229
			} else if ( job.getDesiredCompatibilityLevel().equalsIgnoreCase("openaire2.0_data")) {
230
				logger.debug("Chosen set: OpenAIRE For Data Archives");
231
				logger.debug("Setting METADATA_PREFIX to: oai_datacite");
232
				job.setMetadataPrefix("oai_datacite");			
233
			} else if ( job.getDesiredCompatibilityLevel().equalsIgnoreCase("openaire3.0_cris")) {
234
				logger.debug("Chosen set: OpenAIRE For Cris");
235
				logger.debug("Setting METADATA_PREFIX to: oai_CERIF_openaire");
236
				job.setMetadataPrefix("oai_CERIF_openaire");			
237
			}
238
			
239
			
240
			StoredJob newJob = new StoredJob(job);
241

    
242
			int usageJobs = 0;
243
			int contentJobs = 0;
244
			Set<Integer> totalRules = new HashSet<Integer>();
245
			Map<String,Set<Integer>> verbRuleMap = null;
246
			String validationType = "";
247
			
248
			if (job.getSelectedContentRules() != null) {
249
				contentJobs = 1;
250
				validationType +="C";
251
				totalRules.addAll(job.getSelectedContentRules());
252
				newJob.setContentJobStatus("ongoing");
253
			} else {
254
				newJob.setContentJobStatus("none");
255
			}
256
			if (job.getSelectedUsageRules() != null) {
257
				logger.debug("Creating map for provider information");
258
				verbRuleMap= new HashMap<String,Set<Integer>>();
259
				Set<Integer> old,temp = null;
260
				for (Integer id : job.getSelectedUsageRules()){
261
					eu.dnetlib.domain.functionality.validator.Rule ruleStored = rulesDao.get(id);
262
					logger.debug("Checking for verb : "+ruleStored.getProvider_information());
263
			        if((old=verbRuleMap.get(ruleStored.getProvider_information())) == null){
264
			        	logger.debug("Verb doesn't exist");
265
			            temp = new HashSet<Integer>();
266
			            temp.add(ruleStored.getId());
267
			            verbRuleMap.put(ruleStored.getProvider_information(),temp);
268
			        }else{
269
			        	logger.debug("Verb exists");
270
			            old.add(ruleStored.getId());
271
			        }
272
				}
273
				usageJobs = verbRuleMap.size();
274
				validationType +="U";
275
				totalRules.addAll(job.getSelectedUsageRules());
276
				newJob.setUsageJobStatus("ongoing");
277
			} else {
278
				newJob.setUsageJobStatus("none");
279
			}
280
			
281
			
282
			Map<String, Set<Rule>> entityChosenRulesMap = null;
283
			Map<String, Set<Rule>> entityChosenRulesMapReferential = null;
284
			
285
			if (job.isCris()) {
286
				entityChosenRulesMap = new HashMap<String, Set<Rule>>();
287
				entityChosenRulesMapReferential = new HashMap<String, Set<Rule>>();
288
				this.prepareCrisJobs(job, entityChosenRulesMap, entityChosenRulesMapReferential);
289
				newJob.setGroupByXpath("//header/setSpec");
290
				contentJobs = entityChosenRulesMap.keySet().size() + entityChosenRulesMapReferential.keySet().size();
291
				//TODO move in uoa-domain
292
				newJob.setCris(true);
293
				newJob.setSelectedCrisEntities(job.getSelectedCrisEntities());
294
				newJob.setCrisReferentialChecks(job.isCrisReferentialChecks());
295
			}
296
			newJob.setValidationType(validationType);
297
			if (job.isRegistration()) {
298
				newJob.setJobType("Registration Request");
299
				//TODO move in uoa-domain
300
				newJob.setActivationId(job.getActivationId());
301
				newJob.setRegistration(true);
302
				newJob.setUpdateExisting(job.isUpdateExisting());
303
				newJob.setOfficialName(job.getOfficialName());
304
				newJob.setAdminEmails(job.getAdminEmails());
305
				newJob.setDatasourceId(job.getDatasourceId());
306
				newJob.setInterfaceId(job.getInterfaceId());
307
				newJob.setInterfaceIdOld(job.getInterfaceIdOld());
308
				newJob.setRepoType(job.getRepoType());
309
			} else
310
				newJob.setJobType("Compatibility Test");
311
			
312
			newJob.setDuration("--");
313
			newJob.setRules(totalRules);
314
			newJob.setId(-1);
315
	
316
			int jobIdStored = jobsDao.save(newJob);
317
			
318

    
319
			RegistrationListener regListener = null;
320
			if (job.isRegistration()) {
321
				regListener = listenersManager.createRegListener();
322
				regListener.setActivationId(job.getActivationId());
323
				regListener.setBaseUrl(job.getBaseUrl());
324
				regListener.setActivationId(job.getActivationId());
325
				regListener.setAdminEmails(job.getAdminEmails());
326
				regListener.setOfficialName(job.getOfficialName());
327
				regListener.setUserMail(job.getUserEmail());
328
				regListener.setDatasourceId(job.getDatasourceId());
329
				regListener.setInterfaceId(job.getInterfaceId());
330
				regListener.setValidationSet(job.getValidationSet());
331
				regListener.setDesiredCompLevel(job.getDesiredCompatibilityLevel());
332
				regListener.setRepoType(job.getRepoType());
333
				regListener.setInterfaceIdOld(job.getInterfaceIdOld());
334
				regListener.setUpdateExisting(job.isUpdateExisting());	
335
				regListener.setTotalJobs(usageJobs + contentJobs);
336
			}
337
			
338
			CompatibilityTestListener compTestListener = listenersManager.createCompTestListener();
339
			compTestListener.setValidationSet(job.getValidationSet());
340
			compTestListener.setGuidelines(job.getDesiredCompatibilityLevel());
341
			compTestListener.setTotalJobs(usageJobs + contentJobs);
342

    
343
			
344
//CONTENT
345
			if (job.getSelectedContentRules() != null) {
346
			
347
				Set<Rule> rulesContent = new HashSet<Rule>();
348
				
349
				Properties props = new Properties();
350
				props.setProperty(OAIPMHRecordProvider.BASEURL, job.getBaseUrl());
351
				props.setProperty(OAIPMHRecordProvider.METADATA_PREFIX, newJob.getMetadataPrefix());
352
				props.setProperty(OAIPMHRecordProvider.RECORDS,Integer.toString(job.getRecords()));
353
				props.setProperty(OAIPMHRecordProvider.SET,job.getValidationSet());
354
				
355
		
356
				Job jobContent = null;
357
				
358
				ValidatorJobListener listenerContent = listenersManager.createListener();
359
				listenerContent.setJobSubmittedId(jobIdStored);
360
				listenerContent.setJobSubmittedUser(job.getUserEmail());
361
				listenerContent.setGroupBy_xpath(newJob.getGroupByXpath());
362
				listenerContent.setValidationType("content");
363
				listenerContent.setInternalJobsSum(contentJobs);
364
				
365

    
366
				if (job.isCris()) {
367
					logger.debug("Submiting job for cris.");
368
					logger.debug("Total content jobs: " + contentJobs);
369
//					logger.debug("Selected content rules number: " + job.getSelectedContentRules().size());
370
					jobContent = new Job(jobIdStored, 4, rulesContent, props);
371
					validator.submitJobForCris(jobContent, entityChosenRulesMap, entityChosenRulesMapReferential, listenerContent, compTestListener);
372
				} else {
373
					
374
					logger.debug("Selected content rules number: " + job.getSelectedContentRules().size());
375
					for (Integer ruleId : job.getSelectedContentRules()){
376
						
377
						eu.dnetlib.domain.functionality.validator.Rule tempRule=rulesDao.get(ruleId);
378
						
379
						//special behaviour type of rule is chain
380
						if(tempRule.getType().equals("ChainRule")) {
381
							ChainRule<Rule> chainRule = this.handleChain(tempRule);
382
							rulesContent.add(chainRule);
383
						}
384
						else {
385
							rulesContent.add((Rule) this.getRuleClassInstanceByType(tempRule.getType(), tempRule.getConfiguration(), tempRule.getId()));
386
						}
387
					}
388
					
389
					jobContent = new Job(jobIdStored, 1, rulesContent, props);
390
					
391
					if (job.isRegistration()) {
392
						validator.submitJob(jobContent, 1, listenerContent, regListener);
393
					} else {
394
						validator.submitJob(jobContent, 1, listenerContent, compTestListener);
395
					}	
396
				}
397
			}
398
			
399
			//USAGE	
400
			if (job.getSelectedUsageRules() != null) {
401
			
402
				ValidatorJobListener listenerUsage = listenersManager.createListener();
403
				listenerUsage.setJobSubmittedId(jobIdStored);
404
				listenerUsage.setValidationType("usage");
405
				listenerUsage.setJobSubmittedUser(job.getUserEmail());
406
				listenerUsage.setInternalJobsSum(usageJobs);
407
				List <Job> jobsUsage = new ArrayList<Job>();
408
				for (Map.Entry<String, Set<Integer>> entry : verbRuleMap.entrySet()) {
409
					Properties pros = new Properties();
410
					pros.setProperty(OAIPMHSinglePageVerbProvider.VERB,entry.getKey());
411
					pros.setProperty(OAIPMHSinglePageVerbProvider.BASEURL, job.getBaseUrl());
412
					Set<Rule> rulesUsage = new HashSet<Rule>();
413
					for (Integer ruleId : entry.getValue()){
414
						eu.dnetlib.domain.functionality.validator.Rule tempRule = rulesDao.get(ruleId);
415
						logger.debug("prepare to add rule to registry with regexp: "+tempRule.getConfiguration().getProperty("regexp"));
416
						rulesUsage.add((Rule)this.getRuleClassInstanceByType(tempRule.getType(), tempRule.getConfiguration(), tempRule.getId()));
417
					}
418
					jobsUsage.add(new Job(jobIdStored, 2, rulesUsage, pros));
419
				}
420
				for (Job jobUsage : jobsUsage ) {
421
					if (job.isRegistration()) {
422
						validator.submitJob(jobUsage, 1, listenerUsage, regListener);
423
					} else {
424
						validator.submitJob(jobUsage, 1, listenerUsage, compTestListener);
425
					}
426
				}
427
			}			
428
			
429
			
430
		} catch (Exception e) {
431
			logger.error("error submitting job ", e);
432
			throw new ValidatorException(e);
433
		}
434
		
435
	}
436
	
437
	private void prepareCrisJobs(JobForValidation job,
438
			Map<String, Set<Rule>> entityChosenRulesMap,
439
			Map<String, Set<Rule>> entityChosenRulesMapReferential) throws ValidatorException, DaoException {
440
		//getting rules per entity and leave only chosen ones
441
		logger.debug("Selected Entities: " + job.getSelectedCrisEntities());
442
		for (String entity : RuleTypes.getEntities().keySet()) {
443
			
444
			logger.debug("checking entity: " + entity);
445
			Set<Rule> rulesBasic = new HashSet<Rule>();
446
			Set<Rule> rulesReferential = new HashSet<Rule>();
447
			if (job.getSelectedCrisEntities().contains(entity)) {
448
				logger.debug("entity: " + entity + " is selected");
449
				for (eu.dnetlib.domain.functionality.validator.Rule rule : rulesDao.getAllRulesByJobTypeEntityType("content", entity)) {
450
					if (job.getSelectedContentRules().contains(rule.getId())) {
451
						eu.dnetlib.domain.functionality.validator.Rule tempRule=rulesDao.get(rule.getId());
452
						if (rule.getName().contains("Relationship")) {
453
							if (job.isCrisReferentialChecks()) {
454
								rulesReferential.add((Rule) this.getRuleClassInstanceByType(tempRule.getType(), tempRule.getConfiguration(), tempRule.getId()));
455
							} 
456
						} else {
457
							rulesBasic.add((Rule) this.getRuleClassInstanceByType(tempRule.getType(), tempRule.getConfiguration(), tempRule.getId()));
458
						}
459
					}
460
				}
461
				logger.debug("Basic rules: " + rulesBasic.size());
462
				logger.debug("Referential rules: " + rulesReferential.size());
463
				entityChosenRulesMap.put(RuleTypes.getSetOfEntity(entity), rulesBasic);
464
				if (job.isCrisReferentialChecks() && !rulesReferential.isEmpty())
465
					entityChosenRulesMapReferential.put(RuleTypes.getSetOfEntity(entity), rulesReferential);
466
			} else {
467
				logger.debug("entity: " + entity + " is not selected");
468
			}
469
		}
470
		logger.debug("Return entities: " + entityChosenRulesMap.keySet());
471

    
472
		
473
	}
474

    
475

    
476
	public Rule getRuleClassInstanceByType(String type, Properties pros, int id) throws ValidatorException {
477
		logger.debug("getting rule object of type "+type);
478
		String classname = RuleTypes.getClassOfType(type);
479
		if (classname == null){
480
			logger.debug("error getting rule object of type "+type+" classname=null");
481
			return null;
482
		}
483
		else {
484
			try {
485
				Class<?> clazz = Class.forName(classname);
486
				logger.debug("classname: "+clazz.getName());
487
				return (Rule) clazz.getConstructor(new Class[]{Properties.class,Integer.TYPE}).newInstance(pros,id);
488
				
489
			} catch (Exception e) {
490
				logger.debug("error getting rule object: "+e);
491
				return null;
492
			} 
493
		}
494
	}
495
	
496
	
497
	private ChainRule<Rule> handleChain(eu.dnetlib.domain.functionality.validator.Rule tempRule) throws ValidatorException, DaoException {
498
		logger.debug("chain rule found");
499
		List<Rule> rules_chain = new ArrayList<Rule>();
500
		eu.dnetlib.domain.functionality.validator.Rule tempRuleChain1=rulesDao.get(Integer.parseInt(tempRule.getConfiguration().getProperty("rule_1")));
501
		if(tempRuleChain1.getType().equals("ChainRule")) {
502
			ChainRule<Rule> chainRule1 = this.handleChain(tempRuleChain1);
503
			rules_chain.add(chainRule1);
504
		} else {
505
			rules_chain.add((Rule) this.getRuleClassInstanceByType(tempRuleChain1.getType(), tempRuleChain1.getConfiguration(),tempRuleChain1.getId()));
506
		}
507
		eu.dnetlib.domain.functionality.validator.Rule tempRuleChain2=rulesDao.get(Integer.parseInt(tempRule.getConfiguration().getProperty("rule_2")));
508
		if(tempRuleChain2.getType().equals("ChainRule")) {
509
			ChainRule<Rule> chainRule2 = this.handleChain(tempRuleChain2);
510
			rules_chain.add(chainRule2);
511
		} else {
512
			rules_chain.add((Rule) this.getRuleClassInstanceByType(tempRuleChain2.getType(), tempRuleChain2.getConfiguration(), tempRuleChain2.getId()));
513
		}
514
		Properties chainPros = new Properties();
515
		chainPros.setProperty(ChainRule.TYPE,tempRule.getConfiguration().getProperty(ChainRule.TYPE));
516
		ChainRule<Rule> chainRule = new ChainRule<Rule>(chainPros, tempRule.getId(), rules_chain);
517
		return chainRule;
518
	}
519

    
520
	public Validator getValidator() {
521
		return validator;
522
	}
523

    
524
	public ListenersManager getListenersManager() {
525
		return listenersManager;
526
	}
527

    
528
	public void setListenersManager(ListenersManager listenersManager) {
529
		this.listenersManager = listenersManager;
530
	}
531

    
532
	public void setValidator(Validator validator) {
533
		this.validator = validator;
534
	}
535

    
536
	public JobsDAO getJobsDao() {
537
		return jobsDao;
538
	}
539

    
540
	public void setJobsDao(JobsDAO jobsDao) {
541
		this.jobsDao = jobsDao;
542
	}
543

    
544
	public RulesetsDAO getRulesetsDao() {
545
		return rulesetsDao;
546
	}
547

    
548
	public void setRulesetsDao(RulesetsDAO rulesetsDao) {
549
		this.rulesetsDao = rulesetsDao;
550
	}
551

    
552
	public RulesDAO getRulesDao() {
553
		return rulesDao;
554
	}
555

    
556
	public void setRulesDao(RulesDAO rulesDao) {
557
		this.rulesDao = rulesDao;
558
	}
559

    
560
	public ValidatorRestore getValRestore() {
561
		return valRestore;
562
	}
563

    
564
	public void setValRestore(ValidatorRestore valRestore) {
565
		this.valRestore = valRestore;
566
	}
567
	
568
}
(3-3/4)