Project

General

Profile

« Previous | Next » 

Revision 50489

merged branch dsm into trunk

View differences:

UpdateRepositoryProfilesJobNode.java
1 1
package eu.dnetlib.msro.openaireplus.workflows.nodes;
2 2

  
3
import java.io.StringReader;
4
import java.util.Map;
5
import javax.annotation.Resource;
6
import javax.xml.ws.wsaddressing.W3CEndpointReference;
3
import org.springframework.beans.factory.annotation.Autowired;
7 4

  
8 5
import com.googlecode.sarasvati.Arc;
9 6
import com.googlecode.sarasvati.NodeToken;
10
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
11
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
12
import eu.dnetlib.enabling.resultset.client.ResultSetClientFactory;
13
import eu.dnetlib.msro.workflows.nodes.ProgressJobNode;
7

  
8
import eu.dnetlib.enabling.datasources.common.Api;
9
import eu.dnetlib.enabling.datasources.common.Datasource;
10
import eu.dnetlib.enabling.datasources.common.LocalDatasourceManager;
14 11
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
15
import eu.dnetlib.msro.workflows.resultset.ProcessCountingResultSetFactory;
16
import eu.dnetlib.msro.workflows.util.ProgressProvider;
17
import eu.dnetlib.msro.workflows.util.ResultsetProgressProvider;
18
import eu.dnetlib.msro.workflows.util.WorkflowsConstants;
19
import org.apache.commons.logging.Log;
20
import org.apache.commons.logging.LogFactory;
21
import org.dom4j.Document;
22
import org.dom4j.io.SAXReader;
23 12

  
24
public class UpdateRepositoryProfilesJobNode extends SimpleJobNode implements ProgressJobNode {
13
public class UpdateRepositoryProfilesJobNode extends SimpleJobNode {
25 14

  
26
	private static final String REPOSITORY_SERVICE_RESOURCE_TYPE = "RepositoryServiceResourceType";
15
	@Autowired
16
	private LocalDatasourceManager<Datasource<?, ?>, Api<?>> dsManager;
27 17

  
28
	@Resource
29
	private ResultSetClientFactory resultSetClientFactory;
30

  
31
	@Resource
32
	private UniqueServiceLocator serviceLocator;
33

  
34
	@Resource
35
	private ProcessCountingResultSetFactory processCountingResultSetFactory;
36

  
37
	private String eprParam = "repoEpr";
38
	private String existingReposParam = "existingRepos";
39
	private ResultsetProgressProvider progressProvider;
40

  
41
	private static final Log log = LogFactory.getLog(UpdateRepositoryProfilesJobNode.class); // NOPMD by marko on 11/24/08 5:02 PM
42

  
43 18
	@Override
44 19
	protected String execute(final NodeToken token) throws Exception {
45
		// datasourceID -> profileID
46
		@SuppressWarnings("unchecked")		final Map<String, String> existingRepos =
47
				(Map<String, String>) token.getFullEnv().getTransientAttribute(getExistingReposParam());
48
		final W3CEndpointReference epr = (W3CEndpointReference) token.getFullEnv().getTransientAttribute(getEprParam());
20
		dsManager.regenerateProfiles();
49 21

  
50
		this.progressProvider = processCountingResultSetFactory.createProgressProvider(token.getProcess(), epr);
51

  
52
		final SAXReader reader = new SAXReader();
53

  
54
		int countUpdated = 0;
55
		int countInserted = 0;
56
		int countProfileErrors = 0;
57

  
58
		log.info("Adding/updating repository profiles...");
59

  
60
		final ISRegistryService registry = serviceLocator.getService(ISRegistryService.class);
61

  
62
		for (String profile : resultSetClientFactory.getClient(this.progressProvider.getEpr())) {
63
			try {
64
				final Document doc = reader.read(new StringReader(profile));
65
				final String dsId = doc.valueOf("//EXTRA_FIELDS/FIELD[./key='OpenAireDataSourceId']/value");
66

  
67
				log.debug("Registering/updating profile:\n " + profile + "\n");
68

  
69
				if (existingRepos.containsKey(dsId)) {
70
					final String profId = existingRepos.get(dsId);
71
					doc.selectSingleNode("//RESOURCE_IDENTIFIER/@value").setText(profId);
72
					registry.updateProfile(profId, doc.asXML(), REPOSITORY_SERVICE_RESOURCE_TYPE);
73
					log.debug("Profile " + profId + " UPDATED for ds " + dsId);
74
					countUpdated++;
75
				} else {
76
					final String profId = registry.registerProfile(doc.asXML());
77
					log.debug("Valid Profile " + profId + " REGISTERED for ds " + dsId);
78
					countInserted++;
79
				}
80
			} catch (Exception e) {
81
				log.error("INVALID PROFILE: " + profile, e);
82
				countProfileErrors++;
83
			}
84
		}
85

  
86
		log.info("   - updated_profiles: " + countUpdated);
87
		log.info("   - inserted_profiles: " + countInserted);
88
		log.info("   - profiles_with_errors: " + countProfileErrors);
89

  
90
		token.getEnv().setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX + "updated_profiles", countUpdated);
91
		token.getEnv().setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX + "inserted_profiles", countInserted);
92
		token.getEnv().setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX + "profiles_with_errors", countProfileErrors);
93

  
94 22
		return Arc.DEFAULT_ARC;
95 23
	}
96 24

  
97
	public String getEprParam() {
98
		return eprParam;
99
	}
100

  
101
	public void setEprParam(final String eprParam) {
102
		this.eprParam = eprParam;
103
	}
104

  
105
	public String getExistingReposParam() {
106
		return existingReposParam;
107
	}
108

  
109
	public void setExistingReposParam(final String existingReposParam) {
110
		this.existingReposParam = existingReposParam;
111
	}
112

  
113
	@Override
114
	public ProgressProvider getProgressProvider() {
115
		return progressProvider;
116
	}
117

  
118 25
}

Also available in: Unified diff