Revision 39033
Added by Michele Artini about 9 years ago
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 |
} |
Also available in: Unified diff
[maven-release-plugin] copy for tag dnet-msro-service-3.0.9