Project

General

Profile

1
package eu.dnetlib.enabling.is.jdbc;
2

    
3
import java.io.IOException;
4
import java.io.StringWriter;
5
import java.sql.Array;
6
import java.sql.ResultSet;
7
import java.sql.ResultSetMetaData;
8
import java.sql.SQLException;
9

    
10
import org.springframework.jdbc.core.RowMapper;
11

    
12
import com.google.gson.stream.JsonWriter;
13

    
14
public class JsonRowMapper implements RowMapper<String> {
15

    
16
	@Override
17
	public String mapRow(final ResultSet rs, final int pos) throws SQLException {
18
		final ResultSetMetaData rsMetadata = rs.getMetaData();
19

    
20
		final StringWriter sw = new StringWriter();
21
		try {
22
			final JsonWriter writer = new JsonWriter(sw);
23
			writer.beginObject();
24
			for (int i = 1; i <= rsMetadata.getColumnCount(); i++) {
25
				writer.name(rsMetadata.getColumnLabel(i));
26
				writeValue(writer, rs.getObject(i));
27
			}
28
			writer.endObject();
29
			writer.close();
30
		} catch (IOException e) {
31
			throw new SQLException("Error during Json conversion", e);
32
		}
33
		return sw.toString();
34
	}
35

    
36
	private void writeValue(final JsonWriter writer, final Object object) throws IOException, SQLException {
37
		if (object == null) {
38
			return;
39
		} else if (object instanceof Boolean) {
40
			writer.value((Boolean) object);
41
		} else if (object instanceof Number) {
42
			writer.value((Number) object);
43
		} else if (object instanceof Array) {
44
			writer.beginArray();
45
			for (Object o : (Object[]) ((Array) object).getArray()) {
46
				writeValue(writer, o);
47
			}
48
			writer.endArray();
49
		} else {
50
			writer.value(object.toString());
51
		}
52
	}
53
}
(2-2/2)