Project

General

Profile

« Previous | Next » 

Revision 39033

[maven-release-plugin] copy for tag dnet-msro-service-3.0.9

View differences:

modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/nodes/info/SetProviderInfoJobNode.java
1
package eu.dnetlib.msro.workflows.nodes.info;
2

  
3
import com.googlecode.sarasvati.Arc;
4
import com.googlecode.sarasvati.NodeToken;
5

  
6
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
7
import eu.dnetlib.msro.workflows.util.WorkflowsConstants;
8

  
9
public class SetProviderInfoJobNode extends SimpleJobNode {
10
	private String providerId;
11
	private String providerName;
12
	private String api;
13
	
14
	@Override
15
	protected String execute(NodeToken token) throws Exception {
16
		token.getEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_ID, getProviderId());
17
		token.getEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_NAME, getProviderName());
18
		token.getEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_INTERFACE, getApi());
19
		
20
		token.getFullEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_ID, getProviderId());
21
		token.getFullEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_NAME, getProviderName());
22
		token.getFullEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_INTERFACE, getApi());
23
		
24
		token.getProcess().getEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_ID, getProviderId());
25
		token.getProcess().getEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_NAME, getProviderName());
26
		token.getProcess().getEnv().setAttribute(WorkflowsConstants.DATAPROVIDER_INTERFACE, getApi());
27
		
28
		return Arc.DEFAULT_ARC;
29
	}
30

  
31
	public String getProviderId() {
32
		return providerId;
33
	}
34

  
35
	public void setProviderId(String providerId) {
36
		this.providerId = providerId;
37
	}
38

  
39
	public String getProviderName() {
40
		return providerName;
41
	}
42

  
43
	public void setProviderName(String providerName) {
44
		this.providerName = providerName;
45
	}
46

  
47
	public String getApi() {
48
		return api;
49
	}
50

  
51
	public void setApi(String api) {
52
		this.api = api;
53
	}
54

  
55
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/nodes/objectStore/RetrieveMdStoreId.java
1
package eu.dnetlib.msro.workflows.nodes.objectStore;
2

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

  
6
import javax.annotation.Resource;
7

  
8
import org.springframework.beans.factory.annotation.Required;
9

  
10
import com.google.common.collect.Lists;
11
import com.google.common.collect.Sets;
12
import com.google.gson.Gson;
13
import com.google.gson.GsonBuilder;
14
import com.googlecode.sarasvati.Arc;
15
import com.googlecode.sarasvati.NodeToken;
16

  
17
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException;
18
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
19
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
20
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
21

  
22
/**
23
 * The Class RetrieveMdStoreId is a job node used to retrieve the correct MDStore from which extract the url of the file to download.
24
 * metadata format and interpretation are injected as properties
25
 */
26
public class RetrieveMdStoreId extends SimpleJobNode {
27

  
28
	/** The metadata format. */
29
	private String metadataFormat;
30

  
31
	/** The interpretation. */
32
	private String interpretation;
33

  
34
	/** The provider id. */
35
	private String providerId;
36

  
37
	/** The service locator. */
38
	@Resource
39
	private UniqueServiceLocator serviceLocator;
40

  
41
	/*
42
	 * (non-Javadoc)
43
	 *
44
	 * @see eu.dnetlib.msro.workflows.nodes.SimpleJobNode#execute(com.googlecode.sarasvati.NodeToken)
45
	 */
46
	@Override
47
	protected String execute(final NodeToken token) throws Exception {
48

  
49
		String workflowQuery =
50
				"for $x in collection('/db/DRIVER/MetaWorkflowDSResources/MetaWorkflowDSResourceType') where($x//DATAPROVIDER/@id='%s') return  distinct-values($x//WORKFLOW/@id/string())";
51

  
52
		List<String> result = serviceLocator.getService(ISLookUpService.class).quickSearchProfile(String.format(workflowQuery, providerId));
53
		if (result.size() == 0) { throw new RuntimeException("there is no mdStore Associated to the provider " + token.getEnv().getAttribute(getProviderId())); }
54
		Set<String> workflowIds = Sets.newHashSet(result);
55

  
56
		Set<String> metadataIds = getMdStores(workflowIds);
57
		Gson g = new GsonBuilder().disableHtmlEscaping().create();
58
		token.getEnv().setAttribute("mdId", g.toJson(metadataIds));
59

  
60
		token.getEnv().setAttribute("mdFormat", getMetadataFormat());
61
		return Arc.DEFAULT_ARC;
62
	}
63

  
64
	private Set<String> getMdStores(final Set<String> workflowsId) {
65
		try {
66

  
67
			String query = "//RESOURCE_PROFILE[.//RESOURCE_IDENTIFIER/@value='%s']//PARAM[./@category/string()='MDSTORE_ID']/text()";
68

  
69
			Set<String> mdStores = Sets.newHashSet();
70

  
71
			if (workflowsId == null) { return null; }
72

  
73
			for (String workflowId : workflowsId) {
74
				List<String> result = serviceLocator.getService(ISLookUpService.class).quickSearchProfile(String.format(query, workflowId));
75
				Set<String> metadataIds = Sets.newHashSet(result);
76
				mdStores.addAll(getRightMetadataId(Lists.newArrayList(metadataIds)));
77
			}
78
			return mdStores;
79

  
80
		} catch (ISLookUpException e) {
81

  
82
			return null;
83
		}
84
	}
85

  
86
	/**
87
	 * Gets the right metadata id whith the format metadataFormat and interpretation interpretation
88
	 *
89
	 * @return the right metadata id
90
	 * @throws ISLookUpException
91
	 */
92
	private Set<String> getRightMetadataId(final Iterable<String> ids) throws ISLookUpException {
93
		String query =
94
				"let $x:=//RESOURCE_PROFILE[.//RESOURCE_IDENTIFIER/@value='%s'] return concat($x//METADATA_FORMAT/text(), '::<<>>::', $x//METADATA_FORMAT_INTERPRETATION/text())";
95
		Set<String> result = Sets.newHashSet();
96

  
97
		for (String id : ids) {
98

  
99
			List<String> results = serviceLocator.getService(ISLookUpService.class).quickSearchProfile(String.format(query, id));
100
			if (results.size() > 0) {
101
				String[] values = results.get(0).split("::<<>>::");
102
				if (metadataFormat.equals(values[0]) && interpretation.equals(values[1])) {
103
					result.add(id);
104
				}
105
			}
106
		}
107
		return result;
108

  
109
	}
110

  
111
	/**
112
	 * Gets the interpretation.
113
	 *
114
	 * @return the interpretation
115
	 */
116
	public String getInterpretation() {
117
		return interpretation;
118
	}
119

  
120
	/**
121
	 * Sets the interpretation.
122
	 *
123
	 * @param interpretation
124
	 *            the interpretation to set
125
	 */
126
	@Required
127
	public void setInterpretation(final String interpretation) {
128
		this.interpretation = interpretation;
129
	}
130

  
131
	/**
132
	 * Gets the metadata format.
133
	 *
134
	 * @return the metadataFormat
135
	 */
136
	public String getMetadataFormat() {
137
		return metadataFormat;
138
	}
139

  
140
	/**
141
	 * Sets the metadata format.
142
	 *
143
	 * @param metadataFormat
144
	 *            the metadataFormat to set
145
	 */
146
	@Required
147
	public void setMetadataFormat(final String metadataFormat) {
148
		this.metadataFormat = metadataFormat;
149
	}
150

  
151
	/**
152
	 * Gets the provider id.
153
	 *
154
	 * @return the providerId
155
	 */
156
	public String getProviderId() {
157
		return providerId;
158
	}
159

  
160
	/**
161
	 * Sets the provider id.
162
	 *
163
	 * @param providerId
164
	 *            the providerId to set
165
	 */
166
	public void setProviderId(final String providerId) {
167
		this.providerId = providerId;
168
	}
169

  
170
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/nodes/objectStore/RetrieveURLSJobNode.java
1
package eu.dnetlib.msro.workflows.nodes.objectStore;
2

  
3
import javax.annotation.Resource;
4
import javax.xml.ws.wsaddressing.W3CEndpointReference;
5

  
6
import org.springframework.beans.factory.annotation.Autowired;
7
import org.springframework.beans.factory.annotation.Required;
8

  
9
import com.google.common.collect.Iterables;
10
import com.googlecode.sarasvati.Arc;
11
import com.googlecode.sarasvati.NodeToken;
12

  
13
import eu.dnetlib.enabling.resultset.IterableResultSetFactory;
14
import eu.dnetlib.enabling.resultset.client.ResultSetClientFactory;
15
import eu.dnetlib.enabling.resultset.client.utils.EPRUtils;
16
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
17
import eu.dnetlib.msro.workflows.nodes.download.UrlExtractor;
18

  
19
// TODO: Auto-generated Javadoc
20
/**
21
 * The Class RetrieveURLSJobNode.
22
 */
23
public class RetrieveURLSJobNode extends SimpleJobNode {
24

  
25
	/** The epr param. */
26
	private String inputEprParam;
27

  
28
	/** The output epr param. */
29
	private String outputEprParam;
30

  
31
	/** The xpath. */
32
	private String xpath;
33

  
34
	/** The xpath metadata id. */
35
	private String xpathMetadataId;
36

  
37
	/** The xpath open access. */
38
	private String xpathOpenAccess;
39

  
40
	/** The xpath embargo date. */
41
	private String xpathEmbargoDate;
42

  
43
	/** The result set client factory. */
44
	@Autowired
45
	private ResultSetClientFactory resultSetClientFactory;
46

  
47
	/** The result set factory. */
48
	@Resource(name = "iterableResultSetFactory")
49
	private IterableResultSetFactory resultSetFactory;
50

  
51
	/*
52
	 * (non-Javadoc)
53
	 *
54
	 * @see eu.dnetlib.msro.workflows.nodes.SimpleJobNode#execute(com.googlecode.sarasvati.NodeToken)
55
	 */
56
	@Override
57
	protected String execute(final NodeToken token) throws Exception {
58
		final W3CEndpointReference inputEpr = (new EPRUtils()).getEpr(token.getEnv().getAttribute(inputEprParam));
59
		Iterable<String> input = resultSetClientFactory.getClient(inputEpr);
60
		Iterable<String> extractedUrls = Iterables.transform(input, new UrlExtractor(xpath, xpathMetadataId, xpathOpenAccess, xpathEmbargoDate));
61
		W3CEndpointReference eprUrls = resultSetFactory.createIterableResultSet(extractedUrls);
62
		token.getEnv().setAttribute(getOutputEprParam(), eprUrls.toString());
63
		return Arc.DEFAULT_ARC;
64
	}
65

  
66
	/**
67
	 * Gets the xpath.
68
	 *
69
	 * @return the xpath
70
	 */
71
	public String getXpath() {
72
		return xpath;
73
	}
74

  
75
	/**
76
	 * Sets the xpath.
77
	 *
78
	 * @param xpath
79
	 *            the xpath to set
80
	 */
81
	public void setXpath(final String xpath) {
82
		this.xpath = xpath;
83
	}
84

  
85
	/**
86
	 * Gets the xpath metadata id.
87
	 *
88
	 * @return the xpathMetadataId
89
	 */
90
	public String getXpathMetadataId() {
91
		return xpathMetadataId;
92
	}
93

  
94
	/**
95
	 * Sets the xpath metadata id.
96
	 *
97
	 * @param xpathMetadataId
98
	 *            the xpathMetadataId to set
99
	 */
100
	@Required
101
	public void setXpathMetadataId(final String xpathMetadataId) {
102
		this.xpathMetadataId = xpathMetadataId;
103
	}
104

  
105
	/**
106
	 * Gets the result set client factory.
107
	 *
108
	 * @return the resultSetClientFactory
109
	 */
110
	public ResultSetClientFactory getResultSetClientFactory() {
111
		return resultSetClientFactory;
112
	}
113

  
114
	/**
115
	 * Sets the result set client factory.
116
	 *
117
	 * @param resultSetClientFactory
118
	 *            the resultSetClientFactory to set
119
	 */
120
	public void setResultSetClientFactory(final ResultSetClientFactory resultSetClientFactory) {
121
		this.resultSetClientFactory = resultSetClientFactory;
122
	}
123

  
124
	/**
125
	 * Gets the result set factory.
126
	 *
127
	 * @return the resultSetFactory
128
	 */
129
	public IterableResultSetFactory getResultSetFactory() {
130
		return resultSetFactory;
131
	}
132

  
133
	/**
134
	 * Sets the result set factory.
135
	 *
136
	 * @param resultSetFactory
137
	 *            the resultSetFactory to set
138
	 */
139
	public void setResultSetFactory(final IterableResultSetFactory resultSetFactory) {
140
		this.resultSetFactory = resultSetFactory;
141
	}
142

  
143
	/**
144
	 * Gets the output epr param.
145
	 *
146
	 * @return the outputEprParam
147
	 */
148
	public String getOutputEprParam() {
149
		return outputEprParam;
150
	}
151

  
152
	/**
153
	 * Sets the output epr param.
154
	 *
155
	 * @param outputEprParam
156
	 *            the outputEprParam to set
157
	 */
158
	public void setOutputEprParam(final String outputEprParam) {
159
		this.outputEprParam = outputEprParam;
160
	}
161

  
162
	/**
163
	 * Gets the input epr param.
164
	 *
165
	 * @return the inputEprParam
166
	 */
167
	public String getInputEprParam() {
168
		return inputEprParam;
169
	}
170

  
171
	/**
172
	 * Sets the input epr param.
173
	 *
174
	 * @param inputEprParam
175
	 *            the inputEprParam to set
176
	 */
177
	public void setInputEprParam(final String inputEprParam) {
178
		this.inputEprParam = inputEprParam;
179
	}
180

  
181
	/**
182
	 * Gets the xpath open access.
183
	 *
184
	 * @return the xpath open access
185
	 */
186
	public String getXpathOpenAccess() {
187
		return xpathOpenAccess;
188
	}
189

  
190
	/**
191
	 * Sets the xpath open access.
192
	 *
193
	 * @param xpathOpenAccess
194
	 *            the new xpath open access
195
	 */
196
	public void setXpathOpenAccess(final String xpathOpenAccess) {
197
		this.xpathOpenAccess = xpathOpenAccess;
198
	}
199

  
200
	/**
201
	 * Gets the xpath embargo date.
202
	 *
203
	 * @return the xpath embargo date
204
	 */
205
	public String getXpathEmbargoDate() {
206
		return xpathEmbargoDate;
207
	}
208

  
209
	/**
210
	 * Sets the xpath embargo date.
211
	 *
212
	 * @param xpathEmbargoDate
213
	 *            the new xpath embargo date
214
	 */
215
	public void setXpathEmbargoDate(final String xpathEmbargoDate) {
216
		this.xpathEmbargoDate = xpathEmbargoDate;
217
	}
218

  
219
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/nodes/BlackboardJobNode.java
1
package eu.dnetlib.msro.workflows.nodes;
2

  
3
import javax.annotation.Resource;
4

  
5
import org.apache.commons.lang.StringUtils;
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8

  
9
import com.googlecode.sarasvati.Engine;
10
import com.googlecode.sarasvati.NodeToken;
11

  
12
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
13
import eu.dnetlib.enabling.tools.blackboard.BlackboardClientHandler;
14
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
15
import eu.dnetlib.enabling.tools.blackboard.BlackboardJobImpl;
16
import eu.dnetlib.enabling.tools.blackboard.BlackboardJobRegistry;
17
import eu.dnetlib.msro.workflows.nodes.blackboard.BlackboardWorkflowJobListener;
18
import eu.dnetlib.msro.workflows.util.WorkflowsConstants;
19

  
20
public abstract class BlackboardJobNode extends SarasvatiJobNode {
21

  
22
	@Resource
23
	private UniqueServiceLocator serviceLocator;
24

  
25
	/**
26
	 * logger.
27
	 */
28
	private static final Log log = LogFactory.getLog(BlackboardJobNode.class); // NOPMD by marko on 11/24/08 5:02 PM
29

  
30
	/**
31
	 * blackboard handler.
32
	 */
33
	@Resource
34
	private BlackboardClientHandler blackboardClientHandler;
35

  
36
	/**
37
	 * blackboard job registry.
38
	 */
39
	@Resource
40
	private BlackboardJobRegistry jobRegistry;
41

  
42
	@Override
43
	public void execute(final Engine engine, final NodeToken token) {
44
		super.execute(engine, token);
45

  
46
		log.info("executing blackboard node");
47

  
48
		try {
49
			token.getEnv().setAttribute(WorkflowsConstants.BLACKBOARD_IS_BLACKBOARD, true);
50

  
51
			final String serviceId = obtainServiceId(token);
52
			if (StringUtils.isBlank(serviceId)) {
53
				token.getEnv().setAttribute(WorkflowsConstants.SYSTEM_HAS_FAILED, true);
54
				final String msg = "cannot locate target service profile: " + serviceId;
55
				token.getEnv().setAttribute(WorkflowsConstants.SYSTEM_ERROR, msg);
56
				log.error(msg);
57
				engine.complete(token, "failed");
58
				return;
59
			}
60

  
61
			final BlackboardJob job = blackboardClientHandler.newJob(serviceId);
62

  
63
			token.getEnv().setTransientAttribute(WorkflowsConstants.BLACKBOARD_JOB, job);
64
			token.getEnv().setAttribute(WorkflowsConstants.BLACKBOARD_SERVICE_ID, ((BlackboardJobImpl) job).getServiceId());
65
			prepareJob(job, token);
66

  
67
			jobRegistry.registerJobListener(job, generateBlackboardListener(engine, token));
68

  
69
			blackboardClientHandler.assign(job);
70

  
71
		} catch (final Throwable e) {
72
			token.getEnv().setAttribute(WorkflowsConstants.SYSTEM_HAS_FAILED, true);
73
			token.getEnv().setAttribute(WorkflowsConstants.SYSTEM_ERROR, "cannot prepare blackboard job: " + e);
74
			engine.complete(token, "failed");
75
			log.error("cannot prepare blackboard job", e);
76
		}
77
	}
78

  
79
	abstract protected String obtainServiceId(NodeToken token);
80

  
81
	abstract protected void prepareJob(final BlackboardJob job, final NodeToken token) throws Exception;
82

  
83
	protected BlackboardWorkflowJobListener generateBlackboardListener(final Engine engine, final NodeToken token) {
84
		return new BlackboardWorkflowJobListener(engine, token);
85
	}
86

  
87
	public UniqueServiceLocator getServiceLocator() {
88
		return serviceLocator;
89
	}
90

  
91
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3
	<parent>
4
		<groupId>eu.dnetlib</groupId>
5
		<artifactId>dnet-parent</artifactId>
6
		<version>1.0.0</version>
7
		<relativePath />
8
	</parent>
9
	<modelVersion>4.0.0</modelVersion>
10
	<groupId>eu.dnetlib</groupId>
11
	<artifactId>dnet-msro-service</artifactId>
12
	<packaging>jar</packaging>
13
	<version>3.0.9</version>
14
	<scm>
15
		<developerConnection>scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/dnet-msro-service/tags/dnet-msro-service-3.0.9</developerConnection>
16
	</scm>
17
	<dependencies>
18
		<dependency>
19
			<groupId>opensymphony</groupId>
20
			<artifactId>quartz</artifactId>
21
			<version>1.6.6</version>
22
		</dependency>
23
		<dependency>
24
			<groupId>eu.dnetlib</groupId>
25
			<artifactId>dnet-msro-service-api</artifactId>
26
			<version>[2.0.0,3.0.0)</version>
27
		</dependency>
28
		<dependency>
29
			<groupId>eu.dnetlib</groupId>
30
			<artifactId>cnr-resultset-service</artifactId>
31
			<version>[2.0.0,3.0.0)</version>
32
		</dependency>
33
		<dependency>
34
			<groupId>eu.dnetlib</groupId>
35
			<artifactId>cnr-data-utility-cleaner-rmi</artifactId>
36
			<version>[2.0.0,3.0.0)</version>
37
		</dependency>
38
		<dependency>
39
			<groupId>eu.dnetlib</groupId>
40
			<artifactId>cnr-resultset-client</artifactId>
41
			<version>[2.0.0,3.0.0)</version>
42
		</dependency>
43
		<dependency>
44
			<groupId>eu.dnetlib</groupId>
45
			<artifactId>dnet-download-service-rmi</artifactId>
46
			<version>[1.1.0,2.0.0)</version>
47
		</dependency>
48
		<dependency>
49
			<groupId>eu.dnetlib</groupId>
50
			<artifactId>dnet-datasource-manager-rmi</artifactId>
51
			<version>[4.0.0,5.0.0)</version>
52
		</dependency>
53
		<dependency>
54
			<groupId>eu.dnetlib</groupId>
55
			<artifactId>cnr-blackboard-common</artifactId>
56
			<version>[2.1.0,3.0.0)</version>
57
		</dependency>
58
		<dependency>
59
			<groupId>eu.dnetlib</groupId>
60
			<artifactId>dnet-mongo-logging</artifactId>
61
			<version>[1.0.0,2.0.0)</version>
62
		</dependency>
63
		<dependency>
64
			<groupId>com.googlecode</groupId>
65
			<artifactId>sarasvati</artifactId>
66
			<version>1.0.3</version>
67
		</dependency>
68
		<dependency>
69
			<groupId>com.googlecode</groupId>
70
			<artifactId>sarasvati-visual</artifactId>
71
			<version>1.0.3</version>
72
		</dependency>
73
		<dependency>
74
			<groupId>eu.dnetlib</groupId>
75
			<artifactId>dnet-modular-collector-service-rmi</artifactId>
76
			<version>[1.3.0,2.0.0)</version>
77
		</dependency>
78
		<dependency>
79
			<groupId>eu.dnetlib</groupId>
80
			<artifactId>cnr-enabling-database-api</artifactId>
81
			<version>[1.0.0,2.0.0)</version>
82
		</dependency>
83
		<dependency>
84
			<groupId>eu.dnetlib</groupId>
85
			<artifactId>dnet-objectstore-rmi</artifactId>
86
			<version>[2.0.0,3.0.0)</version>
87
		</dependency>
88
		<dependency>
89
			<groupId>eu.dnetlib</groupId>
90
			<artifactId>dnet-data-transformation-service-rmi</artifactId>
91
			<version>[1.0.0,2.0.0)</version>
92
		</dependency>
93
		<dependency>
94
			<groupId>eu.dnetlib</groupId>
95
			<artifactId>dnet-data-provision-rmi</artifactId>
96
			<version>[1.0.0,2.0.0)</version>
97
		</dependency>
98
		<dependency>
99
			<groupId>eu.dnetlib</groupId>
100
			<artifactId>dnet-runtime</artifactId>
101
			<version>[1.0.0,2.0.0)</version>
102
		</dependency>
103
		<dependency>
104
			<groupId>javax.mail</groupId>
105
			<artifactId>mail</artifactId>
106
			<version>1.4</version>
107
		</dependency>
108
		<dependency>
109
			<groupId>org.codehaus.groovy</groupId>
110
			<artifactId>groovy-all</artifactId>
111
			<version>2.1.6</version>
112
		</dependency>
113
		<dependency>
114
			<groupId>junit</groupId>
115
			<artifactId>junit</artifactId>
116
			<version>${junit.version}</version>
117
			<scope>test</scope>
118
		</dependency>
119
		<dependency>
120
			<groupId>joda-time</groupId>
121
			<artifactId>joda-time</artifactId>
122
			<version>2.3</version>
123
		</dependency>
124
	</dependencies>
125

  
126
	<properties>
127
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
128
	</properties>
129

  
130
</project>
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/nodes/db/UpdateDbJobNode.java
1
package eu.dnetlib.msro.workflows.nodes.db;
2

  
3
import org.apache.commons.logging.Log;
4
import org.apache.commons.logging.LogFactory;
5
import org.springframework.beans.factory.annotation.Required;
6

  
7
import com.googlecode.sarasvati.NodeToken;
8

  
9
import eu.dnetlib.enabling.database.rmi.DatabaseService;
10
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
11
import eu.dnetlib.msro.workflows.nodes.BlackboardJobNode;
12
import eu.dnetlib.msro.workflows.nodes.ProgressJobNode;
13
import eu.dnetlib.msro.workflows.resultset.ProcessCountingResultSetFactory;
14
import eu.dnetlib.msro.workflows.util.ProgressProvider;
15
import eu.dnetlib.msro.workflows.util.ResultsetProgressProvider;
16

  
17
public class UpdateDbJobNode extends BlackboardJobNode implements ProgressJobNode {
18

  
19
	private String db;
20
	private String dbParam;
21
	private String eprParam;
22
	private ProcessCountingResultSetFactory processCountingResultSetFactory;
23
	private ResultsetProgressProvider progressProvider;
24

  
25
	private static final Log log = LogFactory.getLog(UpdateDbJobNode.class);
26

  
27
	@Override
28
	protected String obtainServiceId(final NodeToken token) {
29
		return getServiceLocator().getServiceId(DatabaseService.class);
30
	}
31

  
32
	@Override
33
	protected void prepareJob(final BlackboardJob job, final NodeToken token) throws Exception {
34
		if (db == null || db.isEmpty()) {
35
			db = token.getEnv().getAttribute(getDbParam());
36
		}
37

  
38
		log.info("preparing blackboard job to update DB: " + db);
39

  
40
		final String epr = token.getEnv().getAttribute(getEprParam());
41

  
42
		this.progressProvider = processCountingResultSetFactory.createProgressProvider(token.getProcess(), epr);
43

  
44
		job.setAction("IMPORT");
45
		job.getParameters().put("db", db);
46
		job.getParameters().put("epr", this.progressProvider.getEpr().toString());
47
	}
48

  
49
	@Override
50
	public ProgressProvider getProgressProvider() {
51
		return progressProvider;
52
	}
53

  
54
	public String getDb() {
55
		return db;
56
	}
57

  
58
	public void setDb(final String db) {
59
		this.db = db;
60
	}
61

  
62
	public String getEprParam() {
63
		return eprParam;
64
	}
65

  
66
	public void setEprParam(final String eprParam) {
67
		this.eprParam = eprParam;
68
	}
69

  
70
	public ProcessCountingResultSetFactory getProcessCountingResultSetFactory() {
71
		return processCountingResultSetFactory;
72
	}
73

  
74
	@Required
75
	public void setProcessCountingResultSetFactory(final ProcessCountingResultSetFactory processCountingResultSetFactory) {
76
		this.processCountingResultSetFactory = processCountingResultSetFactory;
77
	}
78

  
79
	public String getDbParam() {
80
		return dbParam;
81
	}
82

  
83
	public void setDbParam(final String dbParam) {
84
		this.dbParam = dbParam;
85
	}
86

  
87
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/metawf/WorkflowProfileCreator.java
1
package eu.dnetlib.msro.workflows.metawf;
2

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

  
6
import org.antlr.stringtemplate.StringTemplate;
7
import org.apache.commons.io.IOUtils;
8
import org.apache.commons.lang.StringEscapeUtils;
9
import org.springframework.core.io.ClassPathResource;
10
import org.springframework.core.io.Resource;
11

  
12
import com.google.common.base.Function;
13
import com.google.common.collect.Maps;
14

  
15
import eu.dnetlib.msro.workflows.util.WorkflowsConstants;
16

  
17
public class WorkflowProfileCreator {
18

  
19
	private static final Resource wfTemplate = new ClassPathResource("/eu/dnetlib/msro/workflows/templates/workflow.xml.st");
20

  
21
	public static String generateProfile(final String name,
22
			final String type,
23
			final WorkflowStartModeEnum startMode,
24
			final Map<String, String> params,
25
			final Resource confTemplate)
26
			throws IOException {
27

  
28
		final StringTemplate conf = new StringTemplate(IOUtils.toString(confTemplate.getInputStream()));
29
		conf.setAttribute("params", Maps.transformValues(params, new Function<String, String>() {
30

  
31
			@Override
32
			public String apply(final String s) {
33
				return StringEscapeUtils.escapeXml(s);
34
			}
35
		}));
36

  
37
		final StringTemplate profile = new StringTemplate(IOUtils.toString(wfTemplate.getInputStream()));
38
		profile.setAttribute("name", name);
39
		profile.setAttribute("type", type);
40
		profile.setAttribute("priority", WorkflowsConstants.DEFAULT_WF_PRIORITY);
41
		profile.setAttribute("conf", conf.toString());
42
		profile.setAttribute("startMode", startMode);
43

  
44
		return profile.toString();
45
	}
46
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/nodes/transform/ApplyXsltJobNode.java
1
package eu.dnetlib.msro.workflows.nodes.transform;
2

  
3
import java.util.HashMap;
4
import java.util.Map;
5

  
6
import javax.xml.ws.wsaddressing.W3CEndpointReference;
7

  
8
import org.springframework.beans.factory.annotation.Required;
9
import org.springframework.core.io.ClassPathResource;
10

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

  
14
import eu.dnetlib.enabling.resultset.XSLTMappedResultSetFactory;
15
import eu.dnetlib.enabling.resultset.client.utils.EPRUtils;
16
import eu.dnetlib.msro.rmi.MSROException;
17
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
18

  
19
public class ApplyXsltJobNode extends SimpleJobNode {
20

  
21
	private String inputEprParam;
22
	private String outputEprParam;
23
	private String xsltClasspath;
24

  
25
	private XSLTMappedResultSetFactory xsltMappedResultSetFactory;
26

  
27
	@Override
28
	protected String execute(final NodeToken token) throws Exception {
29
		final String inputEpr = token.getEnv().getAttribute(inputEprParam);
30
		if ((inputEpr == null) || inputEpr.isEmpty()) throw new MSROException("InputEprParam (" + inputEprParam + ") not found in ENV");
31

  
32
		final Map<String, String> xsltParams = new HashMap<String, String>();
33

  
34
		for (String name : token.getFullEnv().getAttributeNames()) {
35
			xsltParams.put(name.replaceAll(":", "_"), token.getFullEnv().getAttribute(name));
36
		}
37
		for (String name : token.getEnv().getAttributeNames()) {
38
			xsltParams.put(name.replaceAll(":", "_"), token.getEnv().getAttribute(name));
39
		}
40

  
41
		xsltParams.putAll(parseJsonParameters(token));
42

  
43
		final W3CEndpointReference epr = xsltMappedResultSetFactory.createMappedResultSet(new EPRUtils().getEpr(inputEpr),
44
				(new ClassPathResource(xsltClasspath)), xsltParams);
45

  
46
		token.getEnv().setAttribute(outputEprParam, epr.toString());
47

  
48
		return Arc.DEFAULT_ARC;
49
	}
50

  
51
	public String getInputEprParam() {
52
		return inputEprParam;
53
	}
54

  
55
	public void setInputEprParam(final String inputEprParam) {
56
		this.inputEprParam = inputEprParam;
57
	}
58

  
59
	public String getOutputEprParam() {
60
		return outputEprParam;
61
	}
62

  
63
	public void setOutputEprParam(final String outputEprParam) {
64
		this.outputEprParam = outputEprParam;
65
	}
66

  
67
	public String getXsltClasspath() {
68
		return xsltClasspath;
69
	}
70

  
71
	public void setXsltClasspath(final String xsltClasspath) {
72
		this.xsltClasspath = xsltClasspath;
73
	}
74

  
75
	public XSLTMappedResultSetFactory getXsltMappedResultSetFactory() {
76
		return xsltMappedResultSetFactory;
77
	}
78

  
79
	@Required
80
	public void setXsltMappedResultSetFactory(final XSLTMappedResultSetFactory xsltMappedResultSetFactory) {
81
		this.xsltMappedResultSetFactory = xsltMappedResultSetFactory;
82
	}
83

  
84
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/metawf/WorkflowStartModeEnum.java
1
package eu.dnetlib.msro.workflows.metawf;
2

  
3
public enum WorkflowStartModeEnum {
4
	auto, manual, disabled
5
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/nodes/index/PrepareCreateIndexJobNode.java
1
package eu.dnetlib.msro.workflows.nodes.index;
2

  
3
import org.apache.commons.logging.Log;
4
import org.apache.commons.logging.LogFactory;
5

  
6
import com.googlecode.sarasvati.NodeToken;
7

  
8
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
9

  
10
public class PrepareCreateIndexJobNode extends SimpleJobNode {
11

  
12
	private static final Log log = LogFactory.getLog(PrepareCreateIndexJobNode.class);
13

  
14
	private String layout;
15
	private String format;
16
	private String interpretation;
17

  
18
	@Override
19
	protected String execute(final NodeToken token) throws Exception {
20
		log.info("Preparing env for CreateIndexJobNode");
21
		token.getEnv().setAttribute("layout", layout);
22
		token.getEnv().setAttribute("format", format);
23
		token.getEnv().setAttribute("interpretation", interpretation);
24
		return null;
25
	}
26

  
27
	public String getLayout() {
28
		return layout;
29
	}
30

  
31
	public void setLayout(final String layout) {
32
		this.layout = layout;
33
	}
34

  
35
	public String getFormat() {
36
		return format;
37
	}
38

  
39
	public void setFormat(final String format) {
40
		this.format = format;
41
	}
42

  
43
	public String getInterpretation() {
44
		return interpretation;
45
	}
46

  
47
	public void setInterpretation(final String interpretation) {
48
		this.interpretation = interpretation;
49
	}
50

  
51
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/metawf/WorkflowTree.java
1
package eu.dnetlib.msro.workflows.metawf;
2

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

  
8
import javax.annotation.Resource;
9

  
10
import org.apache.commons.lang.StringEscapeUtils;
11
import org.springframework.beans.factory.annotation.Required;
12

  
13
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryException;
14
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
15
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
16

  
17
public class WorkflowTree {
18

  
19
	private String id;
20

  
21
	private String name;
22

  
23
	private WorkflowStartModeEnum start = WorkflowStartModeEnum.auto;
24

  
25
	private List<WorkflowTree> children;
26

  
27
	private org.springframework.core.io.Resource template;
28

  
29
	@Resource
30
	private UniqueServiceLocator serviceLocator;
31

  
32
	public void populateMetaWfXml(final StringWriter sw) {
33
		sw.append("<WORKFLOW id='" + StringEscapeUtils.escapeXml(id) + "' name='" + StringEscapeUtils.escapeXml(name) + "'");
34

  
35
		if (children == null || children.isEmpty()) {
36
			sw.append(" />");
37
		} else {
38
			sw.append(">");
39
			for (WorkflowTree child : children) {
40
				child.populateMetaWfXml(sw);
41
			}
42
			sw.append("</WORKFLOW>");
43
		}
44
	}
45

  
46
	public int registerAllWorkflows(final Map<String, String> params) throws ISRegistryException, IOException {
47
		int count = 0;
48

  
49
		if (this.id == null || this.id.isEmpty()) {
50
			final String profile = WorkflowProfileCreator.generateProfile(name, "aggregator", start, params, template);
51
			this.id = serviceLocator.getService(ISRegistryService.class).registerProfile(profile);
52
			count++;
53
		}
54

  
55
		if (children != null) {
56
			for (WorkflowTree child : children) {
57
				count += child.registerAllWorkflows(params);
58
			}
59
		}
60
		return count;
61
	}
62

  
63
	public String getId() {
64
		return id;
65
	}
66

  
67
	public List<WorkflowTree> getChildren() {
68
		return children;
69
	}
70

  
71
	public void setChildren(final List<WorkflowTree> children) {
72
		this.children = children;
73
	}
74

  
75
	public String getName() {
76
		return name;
77
	}
78

  
79
	@Required
80
	public void setName(final String name) {
81
		this.name = name;
82
	}
83

  
84
	public org.springframework.core.io.Resource getTemplate() {
85
		return template;
86
	}
87

  
88
	@Required
89
	public void setTemplate(final org.springframework.core.io.Resource template) {
90
		this.template = template;
91
	}
92

  
93
	public WorkflowStartModeEnum getStart() {
94
		return start;
95
	}
96

  
97
	public void setStart(final WorkflowStartModeEnum start) {
98
		this.start = start;
99
	}
100

  
101
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/nodes/index/UpdateIndexJobNode.java
1
package eu.dnetlib.msro.workflows.nodes.index;
2

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

  
7
import javax.annotation.Resource;
8
import javax.xml.transform.Transformer;
9
import javax.xml.transform.TransformerConfigurationException;
10
import javax.xml.transform.TransformerException;
11
import javax.xml.transform.TransformerFactory;
12
import javax.xml.transform.dom.DOMResult;
13
import javax.xml.transform.dom.DOMSource;
14
import javax.xml.transform.stream.StreamResult;
15
import javax.xml.transform.stream.StreamSource;
16
import javax.xml.ws.wsaddressing.W3CEndpointReference;
17

  
18
import org.apache.commons.codec.binary.Base64;
19
import org.apache.commons.logging.Log;
20
import org.apache.commons.logging.LogFactory;
21
import org.springframework.beans.factory.annotation.Required;
22

  
23
import com.googlecode.sarasvati.NodeToken;
24

  
25
import eu.dnetlib.data.provision.index.rmi.IndexService;
26
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpDocumentNotFoundException;
27
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException;
28
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
29
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
30
import eu.dnetlib.enabling.resultset.XSLTMappedResultSetFactory;
31
import eu.dnetlib.enabling.resultset.client.utils.EPRUtils;
32
import eu.dnetlib.enabling.resultset.rmi.ResultSetException;
33
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
34
import eu.dnetlib.msro.workflows.nodes.BlackboardJobNode;
35
import eu.dnetlib.msro.workflows.nodes.ProgressJobNode;
36
import eu.dnetlib.msro.workflows.resultset.ProcessCountingResultSetFactory;
37
import eu.dnetlib.msro.workflows.util.ProgressProvider;
38
import eu.dnetlib.msro.workflows.util.ResultsetProgressProvider;
39

  
40
public class UpdateIndexJobNode extends BlackboardJobNode implements ProgressJobNode {
41

  
42
	private static final Log log = LogFactory.getLog(UpdateIndexJobNode.class);
43

  
44
	private String eprParam;
45
	private String indexId;
46
	private String format;
47
	private String layout;
48
	private String feedingType;
49
	private String defaultIndexId;
50

  
51
	/**
52
	 * xslt mapped resultset factory.
53
	 */
54
	private XSLTMappedResultSetFactory xsltRSFactory;
55

  
56
	private ProcessCountingResultSetFactory processCountingResultSetFactory;
57
	private ResultsetProgressProvider progressProvider;
58

  
59
	/**
60
	 * Stylesheet which transforms a layout to another stylesheet which converts a input record to a index record.
61
	 */
62
	private org.springframework.core.io.Resource layoutToRecordStylesheet;
63

  
64
	/**
65
	 * service locator.
66
	 */
67
	@Resource
68
	private UniqueServiceLocator serviceLocator;
69

  
70
	@Override
71
	protected String obtainServiceId(final NodeToken token) {
72
		return getServiceLocator().getServiceId(IndexService.class);
73
	}
74

  
75
	@Override
76
	protected void prepareJob(final BlackboardJob job, final NodeToken token) throws ResultSetException, ISLookUpException, IOException, TransformerException {
77
		log.info("preparing blackboard job update index: " + getIndexId());
78

  
79
		final W3CEndpointReference epr = new EPRUtils().getEpr(token.getEnv().getAttribute(getEprParam()));
80

  
81
		final W3CEndpointReference mappedEpr = prepareForIndexing(epr, getFormat(), getLayout());
82

  
83
		progressProvider = processCountingResultSetFactory.createProgressProvider(token.getProcess(), mappedEpr);
84

  
85
		job.setAction("FEED");
86
		job.getParameters().put("resultset_epr", encode(progressProvider.getEpr().toString()));
87
		job.getParameters().put("id", getIndexId());
88
		job.getParameters().put("feeding_type", getFeedingType());
89
		job.getParameters().put("backend_Id", defaultIndexId);
90
	}
91

  
92
	// helpers
93

  
94
	/**
95
	 * Transforms each mdstore record into a index record.
96
	 * 
97
	 * @param mdStoreRsetEpr
98
	 *            mdstore resulsetset
99
	 * @param layout
100
	 *            layout
101
	 * @param format
102
	 *            format
103
	 * @return resultset with transformed records
104
	 * @throws ISLookUpException
105
	 *             could happen
106
	 * @throws IOException
107
	 *             could happen
108
	 * @throws TransformerException
109
	 *             could happen
110
	 */
111
	protected W3CEndpointReference prepareForIndexing(final W3CEndpointReference mdStoreRsetEpr, final String format, final String layout)
112
			throws ISLookUpException, IOException, TransformerException {
113

  
114
		final TransformerFactory factory = TransformerFactory.newInstance();
115
		final Transformer layoutTransformer = factory.newTransformer(new StreamSource(getLayoutToRecordStylesheet().getInputStream()));
116

  
117
		final DOMResult layoutToXsltXslt = new DOMResult();
118
		layoutTransformer.setParameter("format", format);
119
		layoutTransformer.transform(new StreamSource(new StringReader(getLayoutSource(format, layout))), layoutToXsltXslt);
120

  
121
		dumpXslt(factory, layoutToXsltXslt);
122

  
123
		return getXsltRSFactory().createMappedResultSet(mdStoreRsetEpr, new DOMSource(layoutToXsltXslt.getNode()),
124
				"dynamic layout xslt for " + format + ", " + layout);
125
	}
126

  
127
	private String getLayoutSource(final String format, final String layout) throws ISLookUpDocumentNotFoundException, ISLookUpException {
128
		return serviceLocator.getService(ISLookUpService.class).getResourceProfileByQuery(
129
				"collection('')//RESOURCE_PROFILE[.//RESOURCE_TYPE/@value = 'MDFormatDSResourceType' and .//NAME='" + format + "']//LAYOUT[@name='" + layout
130
						+ "']");
131
	}
132

  
133
	private void dumpXslt(final TransformerFactory factory, final DOMResult layoutToXsltXslt) throws TransformerConfigurationException, TransformerException {
134
		if (log.isDebugEnabled()) {
135
			final StringWriter buffer = new StringWriter();
136
			factory.newTransformer().transform(new DOMSource(layoutToXsltXslt.getNode()), new StreamResult(buffer));
137
			log.debug(buffer.toString());
138
		}
139
	}
140

  
141
	private String encode(final String epr) {
142
		return new String(Base64.encodeBase64(epr.getBytes()));
143
	}
144

  
145
	// setters and getters
146

  
147
	public String getIndexId() {
148
		return indexId;
149
	}
150

  
151
	public void setIndexId(final String indexId) {
152
		this.indexId = indexId;
153
	}
154

  
155
	public String getEprParam() {
156
		return eprParam;
157
	}
158

  
159
	public void setEprParam(final String eprParam) {
160
		this.eprParam = eprParam;
161
	}
162

  
163
	public String getFeedingType() {
164
		return feedingType;
165
	}
166

  
167
	public void setFeedingType(final String feedingType) {
168
		this.feedingType = feedingType;
169
	}
170

  
171
	public ProcessCountingResultSetFactory getProcessCountingResultSetFactory() {
172
		return processCountingResultSetFactory;
173
	}
174

  
175
	@Required
176
	public void setProcessCountingResultSetFactory(final ProcessCountingResultSetFactory processCountingResultSetFactory) {
177
		this.processCountingResultSetFactory = processCountingResultSetFactory;
178
	}
179

  
180
	@Override
181
	public ProgressProvider getProgressProvider() {
182
		return progressProvider;
183
	}
184

  
185
	public org.springframework.core.io.Resource getLayoutToRecordStylesheet() {
186
		return layoutToRecordStylesheet;
187
	}
188

  
189
	@Required
190
	public void setLayoutToRecordStylesheet(final org.springframework.core.io.Resource layoutToRecordStylesheet) {
191
		this.layoutToRecordStylesheet = layoutToRecordStylesheet;
192
	}
193

  
194
	public String getFormat() {
195
		return format;
196
	}
197

  
198
	public void setFormat(final String format) {
199
		this.format = format;
200
	}
201

  
202
	public String getLayout() {
203
		return layout;
204
	}
205

  
206
	public void setLayout(final String layout) {
207
		this.layout = layout;
208
	}
209

  
210
	public XSLTMappedResultSetFactory getXsltRSFactory() {
211
		return xsltRSFactory;
212
	}
213

  
214
	@Required
215
	public void setXsltRSFactory(final XSLTMappedResultSetFactory xsltRSFactory) {
216
		this.xsltRSFactory = xsltRSFactory;
217
	}
218

  
219
	/**
220
	 * @return the defaultIndexId
221
	 */
222
	public String getDefaultIndexId() {
223
		return defaultIndexId;
224
	}
225

  
226
	/**
227
	 * @param defaultIndexId
228
	 *            the defaultIndexId to set
229
	 */
230
	@Required
231
	public void setDefaultIndexId(final String defaultIndexId) {
232
		this.defaultIndexId = defaultIndexId;
233
	}
234

  
235
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/metawf/DatasourceMetaWorkflow.java
1
package eu.dnetlib.msro.workflows.metawf;
2

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

  
7
import org.springframework.beans.factory.annotation.Required;
8
import org.springframework.core.io.Resource;
9

  
10
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryException;
11
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
12
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
13

  
14
public class DatasourceMetaWorkflow {
15

  
16
	private WorkflowTree tree;
17

  
18
	private Resource destroyWorkflowTemplate;
19

  
20
	@javax.annotation.Resource
21
	private UniqueServiceLocator serviceLocator;
22

  
23
	public int registerAllWorkflows(final Map<String, String> params) throws ISRegistryException, IOException {
24
		return tree.registerAllWorkflows(params);
25
	}
26

  
27
	public String registerDestroyWorkflow(final Map<String, String> params) throws ISRegistryException, IOException {
28
		final String profile = WorkflowProfileCreator.generateProfile("Repo BYE", "REPO_BYE", WorkflowStartModeEnum.auto, params, destroyWorkflowTemplate);
29
		return serviceLocator.getService(ISRegistryService.class).registerProfile(profile);
30
	}
31

  
32
	public String asXML() {
33
		final StringWriter sw = new StringWriter();
34
		tree.populateMetaWfXml(sw);
35
		return sw.toString();
36
	}
37

  
38
	public WorkflowTree getTree() {
39
		return tree;
40
	}
41

  
42
	@Required
43
	public void setTree(final WorkflowTree tree) {
44
		this.tree = tree;
45
	}
46

  
47
	public Resource getDestroyWorkflowTemplate() {
48
		return destroyWorkflowTemplate;
49
	}
50

  
51
	@Required
52
	public void setDestroyWorkflowTemplate(final Resource destroyWorkflowTemplate) {
53
		this.destroyWorkflowTemplate = destroyWorkflowTemplate;
54
	}
55

  
56
}
modules/dnet-msro-service/tags/dnet-msro-service-3.0.9/src/main/java/eu/dnetlib/msro/workflows/nodes/info/MDStoreToApiExtraFieldJobNode.java
1
package eu.dnetlib.msro.workflows.nodes.info;
2

  
3
import java.io.StringReader;
4
import java.util.Map;
5

  
6
import javax.annotation.Resource;
7

  
8
import org.dom4j.Document;
9
import org.dom4j.Node;
10
import org.dom4j.io.SAXReader;
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.datasources.rmi.DatasourceManagerService;
17
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
18
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
19
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
20

  
21
public class MDStoreToApiExtraFieldJobNode extends SimpleJobNode {
22

  
23
	private String mdId;
24
	private String datasourceId;
25
	private String datasourceInterface;
26
	private String extraFieldForTotal;
27
	private String extraFieldForDate;
28
	private String extraFieldForMdId;
29

  
30
	@Resource
31
	private UniqueServiceLocator serviceLocator;
32

  
33
	@Override
34
	protected String execute(final NodeToken token) throws Exception {
35
		final String xq = "for $x in collection('/db/DRIVER/MDStoreDSResources/MDStoreDSResourceType') " +
36
				"where $x//RESOURCE_IDENTIFIER/@value='" + mdId + "' " +
37
				"return concat($x//NUMBER_OF_RECORDS, ' @=@ ', $x//LAST_STORAGE_DATE)";
38

  
39
		final String s = serviceLocator.getService(ISLookUpService.class).getResourceProfileByQuery(xq);
40

  
41
		final String[] arr = s.split(" @=@ ");
42

  
43
		final Map<String, String> map = getCurrentExtraFields(datasourceId, datasourceInterface);
44
		map.put(extraFieldForTotal, arr[0].trim());
45
		map.put(extraFieldForDate, arr[1].trim());
46
		map.put(extraFieldForMdId, mdId);
47

  
48
		serviceLocator.getService(DatasourceManagerService.class).bulkUpdateApiExtraFields(datasourceId, datasourceInterface, map);
49

  
50
		return Arc.DEFAULT_ARC;
51
	}
52

  
53
	private Map<String, String> getCurrentExtraFields(final String repoId, final String ifaceId) throws Exception {
54
		final Map<String, String> res = Maps.newHashMap();
55

  
56
		final String profile = serviceLocator.getService(ISLookUpService.class).getResourceProfile(repoId);
57

  
58
		final SAXReader reader = new SAXReader();
59
		final Document doc = reader.read(new StringReader(profile));
60

  
61
		final Node ifcNode = doc.selectSingleNode("//INTERFACE[@id='" + ifaceId + "']");
62
		if (ifcNode != null) {
63
			for (Object o : ifcNode.selectNodes("./INTERFACE_EXTRA_FIELD")) {
64
				res.put(((Node) o).valueOf("@name"), ((Node) o).getText());
65
			}
66
		}
67

  
68
		return res;
69
	}
70

  
71
	public String getMdId() {
72
		return mdId;
73
	}
74

  
75
	public void setMdId(final String mdId) {
76
		this.mdId = mdId;
77
	}
78

  
79
	public String getDatasourceId() {
80
		return datasourceId;
81
	}
82

  
83
	public void setDatasourceId(final String datasourceId) {
84
		this.datasourceId = datasourceId;
85
	}
86

  
87
	public String getDatasourceInterface() {
88
		return datasourceInterface;
89
	}
90

  
91
	public void setDatasourceInterface(final String datasourceInterface) {
92
		this.datasourceInterface = datasourceInterface;
93
	}
94

  
95
	public String getExtraFieldForTotal() {
96
		return extraFieldForTotal;
97
	}
98

  
99
	public void setExtraFieldForTotal(final String extraFieldForTotal) {
100
		this.extraFieldForTotal = extraFieldForTotal;
101
	}
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff