Project

General

Profile

1
package eu.dnetlib.data.claims.migration.handler;
2

    
3
import eu.dnetlib.data.claims.migration.Result;
4
import eu.dnetlib.data.claims.migration.parser.DMFParser;
5
import eu.dnetlib.data.claimsDemo.*;
6
import org.xml.sax.SAXException;
7

    
8
import javax.xml.parsers.ParserConfigurationException;
9
import javax.xml.xpath.XPathExpressionException;
10
import java.io.BufferedWriter;
11
import java.io.FileWriter;
12
import java.io.IOException;
13
import java.io.PrintWriter;
14
import java.sql.ResultSet;
15
import java.sql.Timestamp;
16
import java.util.Date;
17

    
18
/**
19
 * Created by kiatrop on 5/2/2016.
20
 */
21
public class DMFResultHandler {
22

    
23
    SqlDAO sqlDAO = null;
24
    QueryGenerator queryGenerator = null;
25
    DMFParser dmfParser = null;
26

    
27
    /**
28
     * Given an openaire id decides the datasource that the result was collected from
29
     * Default datasource  is openaire
30
     * @param openaireId
31
     * @return  collectedFrom datasource
32
     */
33
    public static String identifyCollectedFrom(String openaireId){
34
        if(openaireId==null){
35
            return null;
36
        }
37
        if(openaireId.contains("crossref")){
38
            return ClaimUtils.COLLECTED_FROM_CROSSREF;
39
        }else if (openaireId.contains("datacite")){
40
            return ClaimUtils.COLLECTED_FROM_DATACITE;
41
        } else if (openaireId.contains("orcid")){
42
            return ClaimUtils.COLLECTED_FROM_ORCID;
43
        }else{
44
            return ClaimUtils.COLLECTED_FROM_OPENAIRE;
45
        }
46

    
47
    }
48

    
49
    private String fetchDMFResult(String id) throws Exception {
50
        ResultSet rs = sqlDAO.executePreparedQuery(queryGenerator.generateSelectDMFByIdQuery(id));
51
        return rs.getString("xml");
52
    }
53

    
54
    public Result fetchResultByDMF(String dmf) throws IOException, SAXException, ParserConfigurationException {
55
        return dmfParser.dmf2Result(dmf);
56
    }
57

    
58
    public Result fetchResultById(String id) throws Exception {
59
        //TODO check
60
       return  fetchResultByDMF(fetchDMFResult(id));
61
//        return ParsingClaimUtils.getResultFromDMF(fetchDMFResult(id));
62
    }
63

    
64
    /**
65
     *
66
     * @param dmf
67
     * @return DOI from DMF - a *valid* one
68
     * @throws IOException
69
     * @throws SAXException
70
     * @throws ParserConfigurationException
71
     * @throws XPathExpressionException
72
     */
73
    public String fetchDoiByDMF(String dmf) throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
74

    
75
        return checkDoiValidity(dmfParser.getDOIIdentifierFromDMF(dmf));
76
    }
77
    public String fetchOrcidWorkByDMF(String dmf) throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
78
        return dmfParser.getOrcidworkIdentifierFromDMF(dmf);
79
    }
80
    public String fetchEmbargoEndDateByDMF(String dmf) throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
81
        return dmfParser.getEmbargoEndDateFromDMF(dmf);
82
    }
83
    public String fetchAccessRights(String dmf) throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
84
        return dmfParser.getAccessRightsFromDMF(dmf);
85
    }
86

    
87
    /**
88
     *
89
     *
90
     * @param doi
91
     * @return DOI String : the given one if it's valid
92
     * @throws Exception
93
     */
94
    public static String checkDoiValidity(String doi)  {
95
        if(doi==null){
96
            return null;
97
        }
98
        try{
99
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("invalid_dois.txt", true)));
100
            boolean isValid= SearchUtils.isDoiValid(doi);
101
            if(!isValid&&(doi.length() - (doi.replace("_", "")).length() > 1)){
102
                String transformDoi = doi.replace("_", "-");
103
                isValid=SearchUtils.isDoiValid(transformDoi);
104
                if(isValid){
105
                    Date date= new java.util.Date();
106
                    out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with : "+transformDoi);
107
                    doi=transformDoi;
108
                }
109
            }else if(!isValid&&(doi.length() - (doi.replace("_", "")).length() == 1)) {
110
                String transformDoi = doi.replace("_", "-");
111
                isValid=SearchUtils.isDoiValid(transformDoi);
112
                if(isValid){
113
                    Date date= new java.util.Date();
114
                    out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with : "+transformDoi);
115
                    doi = transformDoi;
116
                }
117
            }else if(!isValid) {
118
                String transformDoi =doi.replaceAll("\\p{C}", "");
119
                isValid=SearchUtils.isDoiValid(transformDoi);
120
                if(isValid){
121
                    Date date= new java.util.Date();
122
                    out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with (zero-width-char): "+transformDoi);
123
                    doi = transformDoi;
124
                }
125
            }
126
            out.close();
127
        }catch (IOException e) {
128
            e.printStackTrace();
129
            System.err.println("Couldn't write to file " + "invalid_dois.txt");
130
        }
131
        return doi;
132
    }
133

    
134
    public SqlDAO getSqlDAO() {
135
        return sqlDAO;
136
    }
137

    
138
    public void setSqlDAO(SqlDAO sqlDAO) {
139
        this.sqlDAO = sqlDAO;
140
    }
141

    
142
    public QueryGenerator getQueryGenerator() {
143
        return queryGenerator;
144
    }
145

    
146
    public void setQueryGenerator(QueryGenerator queryGenerator) {
147
        this.queryGenerator = queryGenerator;
148
    }
149

    
150
    public DMFParser getDmfParser() {
151
        return dmfParser;
152
    }
153

    
154
    public void setDmfParser(DMFParser dmfParser) {
155
        this.dmfParser = dmfParser;
156
    }
157
}
(4-4/9)