Project

General

Profile

1
package eu.dnetlib.enabling.soap;
2

    
3
import java.util.Map;
4
import javax.xml.namespace.QName;
5
import javax.xml.transform.TransformerFactory;
6
import javax.xml.ws.wsaddressing.W3CEndpointReference;
7

    
8
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
9
import eu.dnetlib.enabling.tools.OpaqueResource;
10
import eu.dnetlib.enabling.tools.StringOpaqueResource;
11
import eu.dnetlib.rmi.enabling.ISLookUpService;
12
import eu.dnetlib.soap.AbstractEndpointReferenceBuilder;
13
import eu.dnetlib.soap.EndpointReferenceBuilder;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.beans.factory.annotation.Required;
16

    
17
/**
18
 * Builds an epr given an ID to a datastructure.
19
 * 
20
 * @author marko
21
 * 
22
 */
23
public class DataStructureLookupEndpointReferenceBuilder extends AbstractEndpointReferenceBuilder<String> implements EndpointReferenceBuilder<String> {
24

    
25
	/**
26
	 * service locator.
27
	 */
28
	private UniqueServiceLocator serviceLocator;
29

    
30
	/**
31
	 * underlying ds epr builder.
32
	 */
33
	private DataStructureProfileEndpointReferenceBuilder dsEprBuilder;
34

    
35
	@Autowired
36
	private TransformerFactory saxonTransformerFactory;
37

    
38
	/**
39
	 * {@inheritDoc}
40
	 * 
41
	 * @see eu.dnetlib.soap.EndpointReferenceBuilder#getAddress(java.lang.Object)
42
	 */
43
	@Override
44
	public String getAddress(final String pid) {
45
		return dsEprBuilder.getAddress(getProfile(pid));
46
	}
47

    
48
	/**
49
	 * {@inheritDoc}
50
	 * 
51
	 * @see eu.dnetlib.soap.EndpointReferenceBuilder#getEndpointReference(java.lang.Object, java.lang.String, java.util.Map)
52
	 */
53
	@Override
54
	public W3CEndpointReference getEndpointReference(final String pid, final String referenceParam, final Map<QName, Object> attrs) {
55
		return dsEprBuilder.getEndpointReference(getProfile(pid), attrs);
56
	}
57

    
58
	/**
59
	 * obtain the ds profile
60
	 * 
61
	 * @param pid
62
	 *            datastructure profile
63
	 * @return resource
64
	 */
65
	private OpaqueResource getProfile(final String pid) {
66
		try {
67
			return new StringOpaqueResource(serviceLocator.getService(ISLookUpService.class).getResourceProfile(pid), saxonTransformerFactory);
68
		} catch (Exception e) { // TODO: remove this hack (conversion to unchecked exception)
69
			throw new IllegalStateException(e);
70
		}
71
	}
72

    
73
	public DataStructureProfileEndpointReferenceBuilder getDsEprBuilder() {
74
		return dsEprBuilder;
75
	}
76

    
77
	@Required
78
	public void setDsEprBuilder(final DataStructureProfileEndpointReferenceBuilder dsEprBuilder) {
79
		this.dsEprBuilder = dsEprBuilder;
80
	}
81

    
82
	public UniqueServiceLocator getServiceLocator() {
83
		return serviceLocator;
84
	}
85

    
86
	@Required
87
	public void setServiceLocator(final UniqueServiceLocator serviceLocator) {
88
		this.serviceLocator = serviceLocator;
89
	}
90

    
91
}
(1-1/2)