Project

General

Profile

1
package eu.dnetlib.goldoa.service.dao;
2

    
3
import eu.dnetlib.goldoa.domain.File;
4
import eu.dnetlib.goldoa.domain.Invoice;
5
import org.apache.commons.io.IOUtils;
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8
import org.hibernate.criterion.Restrictions;
9
import org.hibernate.type.StringType;
10
import org.springframework.stereotype.Repository;
11

    
12
import java.io.ByteArrayOutputStream;
13
import java.io.IOException;
14
import java.io.InputStream;
15
import java.util.List;
16

    
17
/**
18
 * Created by panagiotis on 28/1/2017.
19
 */
20
@Repository
21
public class InvoiceDAO extends AbstractDao<String, Invoice>{
22

    
23
    private Log logger = LogFactory.getLog(InvoiceDAO.class);
24

    
25
    public Invoice saveInvoice(Invoice invoice) {
26
        Invoice i = getByKey(invoice.getId());
27
        if(i!=null) {
28
            if(i.getFile()!=null)
29
                invoice.setFile(i.getFile());
30
            Invoice persistened_invoice = (Invoice) getSession().merge(invoice);
31
        }else
32
            persist(invoice);
33

    
34
        return invoice;
35
    }
36

    
37
    @SuppressWarnings("unchecked")
38
    public Invoice getByKey(String invoiceId){
39
        List<Invoice> inv =  createEntityCriteria()
40
                .add(Restrictions.eq("id",invoiceId)).list();
41
        if(inv.size() > 0)
42
            return inv.get(0);
43
        return null;
44
    }
45

    
46
    public Invoice uploadInvoice(String invoiceId, String mimetype, InputStream inputStream) throws IOException {
47
        Invoice inv = getByKey(invoiceId);
48

    
49
        ByteArrayOutputStream baos = null;
50
        baos = new ByteArrayOutputStream();
51
        IOUtils.copy(inputStream, baos);
52
        IOUtils.closeQuietly(baos);
53

    
54

    
55
        File file = new File();
56
        file.setId(getFileId());
57
        file.setMimetype(mimetype);
58
        file.setFile(baos.toByteArray());
59

    
60
        inv.setFile(file);
61
        return inv;
62
    }
63

    
64
    private String getFileId(){
65
        return (String) getSession().createSQLQuery("select nextval('file_id_seq') as id").addScalar("id",StringType.INSTANCE)
66
                .list().get(0);
67
    }
68
}
(5-5/12)