Project

General

Profile

1
package eu.dnetlib.msro.openaireplus.workflows.nodes.consistency;
2

    
3
import java.util.HashSet;
4
import java.util.Set;
5

    
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8
import org.springframework.beans.factory.annotation.Autowired;
9

    
10
import com.googlecode.sarasvati.Arc;
11
import com.googlecode.sarasvati.NodeToken;
12

    
13
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
14
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
15
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
16
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
17
import eu.dnetlib.msro.workflows.util.WorkflowsConstants;
18

    
19
public class FindInvalidWorkflowsJobNode extends SimpleJobNode {
20

    
21
	@Autowired
22
	private UniqueServiceLocator serviceLocator;
23

    
24
	private static final Log log = LogFactory.getLog(FindInvalidWorkflowsJobNode.class);
25

    
26
	private boolean deleteInvalidProfiles = false;
27

    
28
	@Override
29
	protected String execute(final NodeToken token) throws Exception {
30
		final ISLookUpService lookup = serviceLocator.getService(ISLookUpService.class);
31
		final ISRegistryService registry = serviceLocator.getService(ISRegistryService.class);
32

    
33
		final String q1 =
34
				"for $x in collection('/db/DRIVER/MetaWorkflowDSResources/MetaWorkflowDSResourceType')//WORKFLOW/@id|//CONFIGURATION/@destroyWorkflow return $x/string()";
35

    
36
		final String q2 = "for $x in collection('/db/DRIVER/WorkflowDSResources/WorkflowDSResourceType') return $x//RESOURCE_IDENTIFIER/@value/string()";
37

    
38
		final Set<String> valids = new HashSet<>(lookup.quickSearchProfile(q1));
39

    
40
		int count = 0;
41
		int countInvalids = 0;
42
		int countDeleted = 0;
43
		for (final String wfId : lookup.quickSearchProfile(q2)) {
44
			count++;
45
			if (!valids.contains(wfId)) {
46
				log.warn("Invalid wf: " + wfId);
47
				countInvalids++;
48
				if (deleteInvalidProfiles) {
49
					registry.deleteProfile(wfId);
50
					log.info(" -- Deleted");
51
					countDeleted++;
52
				}
53

    
54
			}
55
		}
56

    
57
		token.getEnv().setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX + "total", count);
58
		token.getEnv().setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX + "invalid", countInvalids);
59
		token.getEnv().setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX + "deleted", countDeleted);
60

    
61
		return Arc.DEFAULT_ARC;
62
	}
63

    
64
	public boolean isDeleteInvalidProfiles() {
65
		return deleteInvalidProfiles;
66
	}
67

    
68
	public void setDeleteInvalidProfiles(final boolean deleteInvalidProfiles) {
69
		this.deleteInvalidProfiles = deleteInvalidProfiles;
70
	}
71

    
72
}
(4-4/6)