Project

General

Profile

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

    
3
import eu.dnetlib.data.claims.migration.ClaimValidation;
4
import eu.dnetlib.data.claims.migration.entity.*;
5
import eu.dnetlib.data.claims.migration.parser.DMFParser;
6
import eu.dnetlib.data.claimsDemo.ClaimUtils;
7
import eu.dnetlib.data.claimsDemo.QueryGenerator;
8
import eu.dnetlib.data.claimsDemo.SqlDAO;
9

    
10
import java.util.Date;
11
import java.util.List;
12

    
13
/**
14
 * Created by kiatrop on 5/2/2016.
15
 */
16
public class ClaimHandler {
17

    
18
    SqlDAO sqlDAO = null;
19
    QueryGenerator queryGenerator = null;
20
    ResultHandler resultHandler = null;
21
    DMFContextHandler dmfContextHandler = null;
22
    ProjectHandler projectHandler = null;
23

    
24
    /**
25
     * Saves a list of claims in DB
26
     * @param claims
27
     */
28
    public void saveClaims(List<Claim> claims){
29
        for(Claim claim:claims){
30
            try {
31
                saveClaim(claim);
32
            } catch (Exception e) {
33
                e.printStackTrace();
34
                System.err.print("Claim couldn't be saved : "+claim.getId()+"\n"+claim.toString());
35
            }
36
        }
37
    }
38
   public String  generateSaveQueryForClaim(Claim claim){
39

    
40
       String query= null;
41
       /*if (claim.getSourceType().equals(ClaimUtils.CONTEXT)) {
42
           query = queryGenerator.generateInsertClaimContextQuery(resultHandler.generateSaveQueryForResult(((Result)claim.getTarget())),dmfContextHandler.generateSaveQueryForContext ((Context) claim.getSource()), claim);
43
       } else if (claim.getSourceType().equals(ClaimUtils.PROJECT)) {
44
           query = queryGenerator.generateInsertClaimProjectQuery(resultHandler.generateSaveQueryForResult((Result)claim.getTarget()), projectHandler.generateSaveQueryForProject((Project) claim.getSource()), claim);
45
       } else{
46
           query = queryGenerator.generateInsertClaimResultQuery(resultHandler.generateSaveQueryForResult((Result)claim.getTarget()), resultHandler.generateSaveQueryForResult((Result) claim.getSource()), claim);
47
       }*/
48
       query = queryGenerator.generateInsertFullClaimQuery(claim);
49
       return query;
50
   }
51
    /**
52
     * saves a claim in DB
53
     * @param claim
54
     * @throws Exception
55
     */
56
    public void saveClaim(Claim claim) throws Exception {
57
        sqlDAO.executeUpdateQuery(generateSaveQueryForClaim(claim));
58
    }
59

    
60
    /**
61
     * Gets the main information for a claim relation - builds a claim object
62
     * exports metadata
63
     * and saves the claim relations in the DB
64
     * @param user
65
     * @param date
66
     * @param sourceType
67
     * @param sourceId
68
     * @param sourceCollectedFrom
69
     * @param targetType
70
     * @param targetId
71
     * @param targetCollectedFrom
72
     * @throws Exception
73
     */
74
    public void buildAndInsertClaim(String user, Date date, String sourceType, String sourceId, String sourceCollectedFrom, String targetType, String targetId, String targetCollectedFrom) throws Exception {
75
        Claim claim = buildClaim(user,date,sourceType,sourceId,sourceCollectedFrom, targetType, targetId, targetCollectedFrom);
76
        ClaimValidation claimValidation = new ClaimValidation();
77
        System.out.print(claim.toString());
78
        if(claimValidation.validateClaim(claim)) {
79
            claim = exportMedatataForClaim(claim);
80
            saveClaim(claim);
81
        }
82
    }
83

    
84
    /**
85
     * Gets the main information of a relation claim and
86
     * builds a claim object
87
     * @param user
88
     * @param date
89
     * @param sourceType publication, dataset, project, context
90
     * @param sourceId openaireId, doi or orcid workid
91
     * @param sourceCollectedFrom only for source with type publication, dataset
92
     * @param targetType publication, dataset, project, context
93
     * @param targetId openaireId, doi or orcid workid
94
     * @param targetCollectedFrom only for target with type publication, dataset
95
     * @return a claim object
96
     * @throws Exception
97
     */
98
    private Claim buildClaim(String user,Date date, String sourceType,String sourceId,String sourceCollectedFrom,  String targetType,String targetId,String targetCollectedFrom ) throws Exception {
99
        Claim claim = new Claim();
100
        claim.setUserMail(user);
101
        claim.setDate(date);
102
        //date
103
        claim.setSourceType(sourceType);
104
        claim.setTargetType(targetType);
105
        claim.setSource(buildOpenaireEntity(sourceId,sourceType,sourceCollectedFrom));
106
        claim.setTarget(buildOpenaireEntity(targetId,targetType,targetCollectedFrom));
107
        //TODO from external sources need an OPenaireID
108

    
109
        return claim;
110

    
111
    }
112

    
113
    /**
114
     * Gets the main information of an openaire entity
115
     * and returns a full  object
116
     * @param id
117
     * @param type
118
     * @param collectedFrom
119
     * @return openaire Entity (Context, Result, Project)
120
     * @throws Exception
121
     */
122
    private OpenaireEntity buildOpenaireEntity(String id, String type, String collectedFrom) throws Exception {
123
        if(type==null){
124
            return null;
125
        }
126
        else if(type.equals(ClaimUtils.CONTEXT)){
127
            return DMFContextHandler.fetchContextById(id);
128
        }else if (type.equals(ClaimUtils.PROJECT)){
129
            return projectHandler.fetchProjectByID(id);
130
        }else if (type.equals(ClaimUtils.PUBLICATION)||type.equals(ClaimUtils.DATASET)){
131
            ExternalRecordHandler externalRecordHandler = new ExternalRecordHandler();
132
            if(collectedFrom == null){
133
                return null;
134
            }else if(collectedFrom.equals(ClaimUtils.CROSSREF)){
135
                return externalRecordHandler.fetchResultfromCrossref(id);
136
            }else if (collectedFrom.equals(ClaimUtils.DATACITE)){
137
                return externalRecordHandler.fetchResultfromDatacite(id);
138
            }else if (collectedFrom.equals(ClaimUtils.ORCID)){
139
                return externalRecordHandler.fetchResultfromOrcid(id);
140
            }else if (collectedFrom.equals(ClaimUtils.OPENAIRE)){
141
                IndexResultHandler indexResultHandler = new IndexResultHandler();
142
                return indexResultHandler.fetchResultById(id);
143
            }
144
        }
145
        return null;
146
    }
147

    
148

    
149
    /**
150
     * Exports the metadata for the source and the target of a claim and sets the proper field
151
     * @param claim
152
     * @return claim with the proper metadata path of the result of source and target
153
     */
154
    public Claim exportMedatataForClaim(Claim claim){
155
        if(claim.getTargetType().equals(ClaimUtils.DATASET)||claim.getTargetType().equals(ClaimUtils.PUBLICATION)){
156
            String path = resultHandler.exportMetadataFileForResult((Result)claim.getTarget());
157
            ((Result) claim.getTarget()).setRecordPath(path);
158
        }
159
        if(claim.getSourceType().equals(ClaimUtils.DATASET)||claim.getSourceType().equals(ClaimUtils.PUBLICATION)){
160
            String path = resultHandler.exportMetadataFileForResult((Result)claim.getSource());
161
            ((Result) claim.getSource()).setRecordPath(path);
162
        }
163
        return claim;
164

    
165
    }
166

    
167
    public void deleteClaim(String user, String claimId){
168
        //TODO
169
    }
170

    
171
    public SqlDAO getSqlDAO() {
172
        return sqlDAO;
173
    }
174

    
175
    public void setSqlDAO(SqlDAO sqlDAO) {
176
        this.sqlDAO = sqlDAO;
177
    }
178

    
179
    public QueryGenerator getQueryGenerator() {
180
        return queryGenerator;
181
    }
182

    
183
    public void setQueryGenerator(QueryGenerator queryGenerator) {
184
        this.queryGenerator = queryGenerator;
185
    }
186

    
187
    public ResultHandler getResultHandler() {
188
        return resultHandler;
189
    }
190

    
191
    public void setResultHandler(ResultHandler resultHandler) {
192
        this.resultHandler = resultHandler;
193
    }
194

    
195
    public DMFContextHandler getDmfContextHandler() {
196
        return dmfContextHandler;
197
    }
198

    
199
    public void setDmfContextHandler(DMFContextHandler dmfContextHandler) {
200
        this.dmfContextHandler = dmfContextHandler;
201
    }
202

    
203
    public ProjectHandler getProjectHandler() {
204
        return projectHandler;
205
    }
206

    
207
    public void setProjectHandler(ProjectHandler projectHandler) {
208
        this.projectHandler = projectHandler;
209
    }
210
}
(1-1/10)