Project

General

Profile

1
package eu.dnetlib.msro.workflows.nodes.repohi;
2

    
3
import java.util.List;
4

    
5
import javax.annotation.Resource;
6

    
7
import com.googlecode.sarasvati.Arc;
8
import com.googlecode.sarasvati.NodeToken;
9

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

    
18
public class UpdateMetaWfStatusJobNode extends SimpleJobNode {
19

    
20
	@Resource
21
	private UniqueServiceLocator serviceLocator;
22

    
23
	@Override
24
	protected String execute(final NodeToken token) throws Exception {
25
		final String metaWfId = token.getFullEnv().getAttribute("META_WORKFLOW_ID");
26

    
27
		final String dsId = token.getFullEnv().getAttribute(WorkflowsConstants.DATAPROVIDER_ID);
28
		final String ifaceId = token.getFullEnv().getAttribute(WorkflowsConstants.DATAPROVIDER_INTERFACE);
29

    
30
		updateDatasource(dsId, ifaceId);
31

    
32
		if (isReady(metaWfId)) {
33
			serviceLocator.getService(ISRegistryService.class).updateProfileNode(metaWfId, "//CONFIGURATION/@status", "'" + WorkflowStatus.EXECUTABLE + "'");
34
		}
35

    
36
		return Arc.DEFAULT_ARC;
37
	}
38

    
39
	protected void updateDatasource(final String dsId, final String ifaceId) throws Exception {
40
		serviceLocator.getService(ISRegistryService.class).updateProfileNode(dsId, "//INTERFACE[@id = '" + ifaceId + "']/@active", "'true'");
41
	}
42

    
43
	private boolean isReady(final String metaWfId) throws Exception {
44
		final String query = "for $x in collection('/db/DRIVER/MetaWorkflowDSResources/MetaWorkflowDSResourceType')"
45
				+ "//RESOURCE_PROFILE[.//RESOURCE_IDENTIFIER/@value eq '" + metaWfId + "']//WORKFLOW/@id "
46
				+ "for $y in collection('/db/DRIVER/WorkflowDSResources/WorkflowDSResourceType') " + "where $y//RESOURCE_IDENTIFIER/@value = $x "
47
				+ "return $y//PARAM[@required='true' and string-length(text()) = 0]/@managedBy/string()";
48

    
49
		final List<String> list = serviceLocator.getService(ISLookUpService.class).quickSearchProfile(query);
50

    
51
		if (list.contains("system")) { throw new MSROException("A system param is missing in profile: " + metaWfId); }
52

    
53
		return list.isEmpty();
54
	}
55

    
56
}
(5-5/7)