Project

General

Profile

1
package eu.dnetlib.dli.resolver;
2

    
3
import java.net.URLEncoder;
4

    
5
import eu.dnetlib.dli.resolver.model.DLIResolvedObject;
6
import eu.dnetlib.pid.resolver.AbstractPIDResolver;
7
import groovy.transform.Synchronized;
8
import org.apache.commons.logging.Log;
9
import org.apache.commons.logging.LogFactory;
10
import org.springframework.beans.factory.annotation.Autowired;
11

    
12
// TODO: Auto-generated Javadoc
13

    
14
/**
15
 * The Class CrossrefDOIResolver.
16
 */
17
public class CrossrefResolver extends AbstractPIDResolver {
18

    
19
	/**
20
	 * The Constant log.
21
	 */
22
	private static final Log log = LogFactory.getLog(CrossrefResolver.class);
23

    
24
	/**
25
	 * The Constant baseUrlCrossref.
26
	 */
27
	private final static String baseUrlCrossref = "http://api.crossref.org/works/";
28

    
29
	/**
30
	 * The parser.
31
	 */
32
	@Autowired
33
	private CrossRefParserJSON parser;
34

    
35
	@Override
36
	protected boolean canResolvePid(final String pidType) {
37
		return (pidType != null) && ("doi".equals(pidType.toLowerCase().trim()) || "handle".equals(pidType.toLowerCase().trim()));
38
	}
39

    
40
	@Override
41
	@Synchronized
42
    protected DLIResolvedObject resolve(final String pid, final String pidType) {
43
        String response;
44
		try {
45
			response = requestURL(baseUrlCrossref + URLEncoder.encode(pid, "UTF-8"));
46
		} catch (Exception e) {
47
			log.debug("unable to get response");
48
			return null;
49
		}
50
		try {
51

    
52
			log.debug("Obtained " + response);
53
			if (response == null) return null;
54
			if (response.contains("Resource not found")) return null;
55
            DLIResolvedObject record = parser.parseRecord(response);
56
            if (record.getPid() == null) return null;
57
			return record;
58
		} catch (Throwable e) {
59
			log.error("Error on resolve pid  " + pid, e);
60
		}
61
		return null;
62
	}
63

    
64
}
(3-3/15)