Project

General

Profile

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

    
3
import java.io.StringReader;
4
import java.io.StringWriter;
5

    
6
import javax.annotation.Resource;
7

    
8
import org.apache.commons.logging.Log;
9
import org.apache.commons.logging.LogFactory;
10
import org.dom4j.Document;
11
import org.dom4j.Node;
12
import org.dom4j.io.SAXReader;
13

    
14
import com.googlecode.sarasvati.Arc;
15
import com.googlecode.sarasvati.NodeToken;
16

    
17
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
18
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
19
import eu.dnetlib.enabling.tools.ServiceLocator;
20
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
21
import eu.dnetlib.msro.workflows.util.WorkflowsConstants;
22

    
23
public class DeleteMetaWfJobNode extends SimpleJobNode {
24

    
25
	private String metaWfId;
26

    
27
	@Resource(name = "registryLocator")
28
	private ServiceLocator<ISRegistryService> registryLocator;
29

    
30
	@Resource(name = "lookupLocator")
31
	private ServiceLocator<ISLookUpService> lookupLocator;
32

    
33
	private static final Log log = LogFactory.getLog(DeleteMetaWfJobNode.class);
34

    
35
	@Override
36
	protected String execute(final NodeToken token) throws Exception {
37
		final String profile = lookupLocator.getService().getResourceProfile(metaWfId);
38
		final Document doc = (new SAXReader()).read(new StringReader(profile));
39

    
40
		final String dsId = doc.valueOf("//DATAPROVIDER/@id");
41
		final String dsName = doc.valueOf("//DATAPROVIDER/text()");
42
		final String ifaceId = doc.valueOf("//DATAPROVIDER/@interface");
43
		final String destroyWfId = doc.valueOf("//CONFIGURATION/@destroyWorkflow");
44

    
45
		log.info("Removing a MetaWf of dataprovider: " + dsId);
46

    
47
		token.getEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_ID, dsId);
48
		token.getEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_NAME, dsName);
49
		token.getEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_INTERFACE, ifaceId);
50

    
51
		for (Object o : doc.selectNodes("//WORKFLOW")) {
52
			final String wfId = ((Node) o).valueOf("@id");
53
			try {
54
				registryLocator.getService().deleteProfile(wfId);
55
				log.info(" - Deleted Workflow: " + wfId);
56
			} catch (Exception e) {
57
				log.error(" - (ERR) Error deleting profile " + wfId);
58
			}
59
		}
60
		registryLocator.getService().deleteProfile(metaWfId);
61
		log.info(" - Deleted MetaWorkflow: " + metaWfId);
62

    
63
		registryLocator.getService().deleteProfile(destroyWfId);
64
		log.info(" - Deleted destroy workflow: " + destroyWfId);
65

    
66
		verifyDatasource(dsId, ifaceId);
67

    
68
		return Arc.DEFAULT_ARC;
69
	}
70

    
71
	private void verifyDatasource(final String dsId, final String ifaceId) throws Exception {
72
		final StringWriter sw = new StringWriter();
73

    
74
		sw.append("for $x in collection('/db/DRIVER/MetaWorkflowDSResources/MetaWorkflowDSResourceType') where");
75
		sw.append("  $x//DATAPROVIDER/@id = '" + dsId + "' and ");
76
		sw.append("  $x//DATAPROVIDER/@interface = '" + ifaceId + "' and ");
77
		sw.append("  $x//RESOURCE_IDENTIFIER/@value != '" + metaWfId + "' ");
78
		sw.append("return $x//RESOURCE_IDENTIFIER/@value/string()");
79

    
80
		final boolean active = !lookupLocator.getService().quickSearchProfile(sw.toString()).isEmpty();
81

    
82
		log.info(" - Updating iface, active status: " + active);
83

    
84
		updateIfaceActivationStatus(dsId, ifaceId, active);
85
	}
86

    
87
	protected void updateIfaceActivationStatus(final String dsId, final String ifaceId, final boolean active) throws Exception {
88
		registryLocator.getService().updateProfileNode(dsId, "//INTERFACE[@id = '" + ifaceId + "']/@active", "'" + active + "'");
89
	}
90

    
91
	public String getMetaWfId() {
92
		return metaWfId;
93
	}
94

    
95
	public void setMetaWfId(final String metaWfId) {
96
		this.metaWfId = metaWfId;
97
	}
98

    
99
	public ServiceLocator<ISLookUpService> getLookupLocator() {
100
		return lookupLocator;
101
	}
102

    
103
}
(2-2/3)