Project

General

Profile

1 26600 sandro.lab
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 32639 michele.ar
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
19 26600 sandro.lab
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 32639 michele.ar
	@Resource
27
	private UniqueServiceLocator serviceLocator;
28 26600 sandro.lab
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 32639 michele.ar
		serviceLocator.getService(ISRegistryService.class).updateProfileNode(metaWfId, "//CONFIGURATION/@status", "'" + WorkflowStatus.WAIT_SYS_SETTINGS + "'");
41 26600 sandro.lab
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 32639 michele.ar
		return serviceLocator.getService(ISRegistryService.class).updateProfileNode(id, "//CONFIGURATION", sw.toString());
76 26600 sandro.lab
	}
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
}