Project

General

Profile

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

    
3
import java.io.IOException;
4
import java.io.StringWriter;
5
import java.util.Map;
6

    
7
import javax.annotation.Resource;
8

    
9
import org.apache.commons.logging.Log;
10
import org.apache.commons.logging.LogFactory;
11

    
12
import com.google.common.collect.Maps;
13
import com.googlecode.sarasvati.Arc;
14
import com.googlecode.sarasvati.NodeToken;
15

    
16
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryException;
17
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
18
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
19
import eu.dnetlib.msro.workflows.metawf.DatasourceMetaWorkflow;
20
import eu.dnetlib.msro.workflows.metawf.DatasourceMetaWorkflowFactory;
21
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
22
import eu.dnetlib.msro.workflows.util.WorkflowsConstants.WorkflowStatus;
23

    
24
public class UpdateMetaWfJobNode extends SimpleJobNode {
25

    
26
	@Resource
27
	private UniqueServiceLocator serviceLocator;
28

    
29
	@Resource
30
	private DatasourceMetaWorkflowFactory datasourceMetaWorkflowFactory;
31

    
32
	private String beanName;
33

    
34
	private static final Log log = LogFactory.getLog(UpdateMetaWfJobNode.class);
35

    
36
	@Override
37
	protected String execute(final NodeToken token) throws Exception {
38
		final String metaWfId = token.getFullEnv().getAttribute("META_WORKFLOW_ID");
39

    
40
		serviceLocator.getService(ISRegistryService.class).updateProfileNode(metaWfId, "//CONFIGURATION/@status", "'" + WorkflowStatus.WAIT_SYS_SETTINGS + "'");
41

    
42
		final Map<String, String> map = Maps.newHashMap();
43
		for (String s : token.getFullEnv().getAttributeNames()) {
44
			map.put(s, token.getFullEnv().getAttribute(s));
45
		}
46
		for (String s : token.getEnv().getAttributeNames()) {
47
			map.put(s, token.getEnv().getAttribute(s));
48
		}
49

    
50
		final DatasourceMetaWorkflow prototypeMetaWf = datasourceMetaWorkflowFactory.newMetaWorkflow(beanName);
51

    
52
		log.info("Updating metaWorkflow of type: " + beanName);
53

    
54
		final int count = prototypeMetaWf.registerAllWorkflows(map);
55
		log.info("  -- Registered wfs: " + count);
56

    
57
		final String repoByeId = prototypeMetaWf.registerDestroyWorkflow(map);
58
		log.info("  -- Repo Bye Wf: " + repoByeId);
59

    
60
		updateDatasourceWorkflow(metaWfId, repoByeId, prototypeMetaWf.asXML());
61
		log.info("Done");
62

    
63
		return Arc.DEFAULT_ARC;
64
	}
65

    
66
	protected boolean updateDatasourceWorkflow(final String id, final String repoByeId, final String metawf) throws ISRegistryException, IOException {
67
		final StringWriter sw = new StringWriter();
68
		sw.append("<CONFIGURATION status='");
69
		sw.append(WorkflowStatus.WAIT_USER_SETTINGS.toString());
70
		sw.append("' destroyWorkflow='");
71
		sw.append(repoByeId);
72
		sw.append("'>");
73
		sw.append(metawf);
74
		sw.append("</CONFIGURATION>");
75
		return serviceLocator.getService(ISRegistryService.class).updateProfileNode(id, "//CONFIGURATION", sw.toString());
76
	}
77

    
78
	@Override
79
	public String getBeanName() {
80
		return beanName;
81
	}
82

    
83
	@Override
84
	public void setBeanName(final String name) {
85
		this.beanName = name;
86
	}
87
}
(4-4/7)