Project

General

Profile

1
package eu.dnetlib.openaire.exporter.model;
2

    
3
import java.sql.Array;
4
import java.sql.Connection;
5
import java.sql.SQLException;
6
import java.util.Arrays;
7
import java.util.List;
8
import java.util.Map;
9
import java.util.stream.Collectors;
10
import javax.persistence.AttributeConverter;
11
import javax.persistence.Converter;
12
import javax.sql.DataSource;
13

    
14
import org.springframework.beans.BeansException;
15
import org.springframework.context.ApplicationContext;
16
import org.springframework.context.ApplicationContextAware;
17

    
18
/**
19
 * Created by claudio on 05/07/2017.
20
 */
21
@Converter
22
public class ConverterTextArray implements AttributeConverter<List<String>, Array>, ApplicationContextAware {
23

    
24
	private ApplicationContext applicationContext;
25

    
26
	@Override
27
	public Array convertToDatabaseColumn(List<String> attribute) {
28

    
29
		final Map<String, DataSource> datasources = applicationContext.getBeansOfType(DataSource.class);
30
		DataSource source = datasources.values().stream().findFirst().get();
31

    
32
		try {
33
			Connection conn = source.getConnection();
34
			Array array = conn.createArrayOf("text", attribute.toArray());
35
			return  array;
36

    
37
		} catch (SQLException e) {
38
			e.printStackTrace();
39
		}
40

    
41
		return null;
42

    
43
	}
44

    
45
	@Override
46
	public List<String> convertToEntityAttribute(Array dbData) {
47
		try {
48
			return Arrays.stream((Object[]) dbData.getArray()).map(d -> (String) d).collect(Collectors.toList());
49
		} catch (SQLException e) {
50
			e.printStackTrace();
51
			return null;
52
		}
53
	}
54

    
55
	@Override
56
	public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
57
		this.applicationContext = applicationContext;
58
	}
59
}
(1-1/2)