Project

General

Profile

« Previous | Next » 

Revision 47135

getting rid of Jongo and its jackson databind dependency

View differences:

DnetLoggerMongoDao.java
2 2

  
3 3
import java.util.*;
4 4
import java.util.Map.Entry;
5
import java.util.function.Consumer;
5 6

  
6 7
import com.google.common.collect.Lists;
7 8
import com.google.common.collect.Maps;
9
import com.google.common.collect.Sets;
8 10
import com.mongodb.BasicDBObject;
9 11
import com.mongodb.BasicDBObjectBuilder;
10 12
import com.mongodb.DBObject;
13
import com.mongodb.client.MongoCollection;
14
import com.mongodb.client.MongoCursor;
15
import com.mongodb.client.MongoDatabase;
11 16
import com.mongodb.client.model.Filters;
17
import com.mongodb.client.model.IndexOptions;
12 18
import eu.dnetlib.common.logging.LogMessage;
13 19
import org.apache.commons.lang.StringUtils;
14 20
import org.apache.commons.logging.Log;
15 21
import org.apache.commons.logging.LogFactory;
22
import org.bson.Document;
16 23
import org.bson.conversions.Bson;
17
import org.jongo.Jongo;
18
import org.jongo.MongoCollection;
19
import org.jongo.MongoCursor;
20 24
import org.springframework.beans.factory.annotation.Autowired;
21 25

  
22 26
public class DnetLoggerMongoDao implements DnetLoggerDao {
......
24 28
	private static final Log log = LogFactory.getLog(DnetLoggerMongoDao.class);
25 29

  
26 30
	@Autowired
27
	private Jongo db;
31
	private MongoDatabase db;
28 32

  
33
	private IndexOptions indexOptions = new IndexOptions().background(true);
34

  
29 35
	@Override
30 36
	public void init(final String collection) {
31
		final Set<String> collections = db.getDatabase().getCollectionNames();
37
		final Set<String> collections = Sets.newHashSet();
38
		db.listCollectionNames().forEach((Consumer<? super String>) c -> collections.add(c));
39

  
32 40
		if (!Lists.newArrayList(collections).contains(collection)) {
33 41
			log.info(String.format("creating collection %s", collection));
34
			db.getDatabase().createCollection(collection, new BasicDBObject());
42
			db.createCollection(collection);
35 43
		}
36 44
	}
37 45

  
38 46
	@Override
39 47
	public void configureIndex(final String collection, final Map<String, IndexConf> conf) {
40
		final MongoCollection coll = db.getCollection(collection);
48
		final MongoCollection<Document> coll = db.getCollection(collection);
41 49
		coll.dropIndexes();
42 50
		for (String key : conf.keySet()) {
43
			coll.ensureIndex("{'"+key+"':1}");
51
			coll.createIndex(new BasicDBObject(key, 1), indexOptions);
44 52
		}
45 53
	}
46 54

  
......
48 56
	public void writeLog(final String collection, final Map<String, Object> map) {
49 57
		final MongoCollection coll = db.getCollection(collection);
50 58
		DBObject obj = BasicDBObjectBuilder.start(replaceKeyNames(map)).get();
51
		coll.insert(obj);
59
		coll.insertOne(obj);
52 60
	}
53 61

  
54 62
	private Map<String, Object> replaceKeyNames(final Map<String, Object> inputMap) {
......
69 77
	@Override
70 78
	public Map<String, String> findOne(final String collection, final String key, final String value) {
71 79
		final MongoCollection coll = db.getCollection(collection);
72
		//final DBObject obj = coll.find(Filters.eq(key, value)).first();
73
		final DBObject obj = coll.findOne(getBasicQuery(key, value)).as(BasicDBObject.class);
80
		final DBObject obj = (DBObject) coll.find(Filters.eq(key, value), DBObject.class).first();
81
		//final DBObject obj = coll.find(getBasicQuery(key, value)).as(BasicDBObject.class);
74 82

  
75 83
		return dbObject2Map(obj);
76 84
	}
......
78 86
	@Override
79 87
	public Iterator<Map<String, String>> obtainLogIterator(final String collection) {
80 88
		final MongoCollection coll = db.getCollection(collection);
81
		return iter(collection, coll.find().as(BasicDBObject.class));
89
		return iter(coll.find().iterator());
82 90
	}
83 91

  
84 92
	@Override
85 93
	public Iterator<Map<String, String>> find(final String collection, final String key, final String value) {
86 94
		final MongoCollection coll = db.getCollection(collection);
87
		return iter(collection, coll.find(getBasicQuery(key, value)).as(BasicDBObject.class));
95
		return iter(coll.find(getBasicQuery(key, value)).iterator());
88 96
	}
89 97

  
90 98
	@Override
91 99
	public Iterator<Map<String, String>> find(final String collection, final Map<String, Object> criteria) {
92 100
		final MongoCollection coll = db.getCollection(collection);
93
		final String query = getCustomQuery(criteria);
94
		return iter(collection, coll.find(query).as(BasicDBObject.class));
101
		return iter(coll.find(getCustomQuery(criteria)).iterator());
95 102
	}
96 103

  
97 104
	@Override
98 105
	public Iterator<Map<String, String>> findByDateRange(final String collection, final Date startDate, final Date endDate) {
99 106
		final MongoCollection coll = db.getCollection(collection);
100
		//Bson dateQuery = dateRangeQuery(startDate, endDate);
101

  
102
		//Filters.and(Filters.gte(LogMessage.LOG_DATE_FIELD, startDate.getTime()), Filters.lt(LogMessage.LOG_DATE_FIELD, endDate.getTime()));
103
		final String query = getDateQuery(startDate, endDate);
104

  
105
		// System.out.println(mongoQueryObject);
106
		return iter(collection, coll.find(query).as(BasicDBObject.class));
107
		return iter(coll.find(getDateQuery(startDate, endDate)).iterator());
107 108
	}
108 109

  
109 110
	@Override
110 111
	public Iterator<Map<String, String>> findByDateRange(final String collection, final Date startDate, final Date endDate, final String key, final String value) {
111 112
		final MongoCollection coll = db.getCollection(collection);
112
		final String dateQuery = getDateQuery(startDate, endDate);
113
		final String customQuery = getBasicQuery(key, value);
114

  
115

  
116
		final StringBuilder sb = new StringBuilder("{'"+key+"':'"+value+"',");
117
		sb.append(StringUtils.removeEnd(sb.toString(), ","))
118
				.append("'" + LogMessage.LOG_DATE_FIELD + "' : {$gte:"+startDate.getTime()+"},")
119
				.append("'" + LogMessage.LOG_DATE_FIELD + "' : {$lt:"+endDate.getTime()+"}}");
120

  
121
		return iter(collection, coll.find(sb.toString()).as(BasicDBObject.class));
113
		final Bson query = Filters.and(getBasicQuery(key, value), getDateQuery(startDate, endDate));
114
		return iter(coll.find(query).iterator());
122 115
	}
123 116

  
124 117
	@Override
125 118
	public Iterator<Map<String, String>> findByDateRange(final String collection, final Date startDate, final Date endDate, final Map<String, Object> criteria) {
126 119
		final MongoCollection coll = db.getCollection(collection);
127
		//final Bson dateQuery = dateRangeQuery(startDate, endDate);
128
		//final BasicDBObject customQuery = new BasicDBObject(criteria);
129

  
130
		final StringBuilder sb = new StringBuilder("{");
131
		for(Entry<String, Object> e : criteria.entrySet()) {
132
			sb.append("'" + e.getKey() + "':'" + e.getValue() + "', ");
133
		}
134
		sb.append(StringUtils.removeEnd(sb.toString(), ","))
135
			.append("'" + LogMessage.LOG_DATE_FIELD + "' : {$gte:"+startDate.getTime()+"},")
136
			.append("'" + LogMessage.LOG_DATE_FIELD + "' : {$lt:"+endDate.getTime()+"}}");
137

  
138
		return iter(collection, coll.find(sb.toString()).as(BasicDBObject.class));
120
		final Bson query = Filters.and(getCustomQuery(criteria), getDateQuery(startDate, endDate));
121
		return iter(coll.find(query).iterator());
139 122
	}
140 123

  
141 124
	@Override
142 125
	public Iterator<Map<String, String>> find(final String collection, final String mongoquery, final List<String> fields) {
143 126
		final MongoCollection coll = db.getCollection(collection);
144
		return iter(collection, coll.find(mongoquery).as(BasicDBObject.class));
127
		final Bson query = BasicDBObject.parse(mongoquery);
128
		return iter(coll.find(query).iterator());
145 129
	}
146 130

  
147
	private String getBasicQuery(final String key, final String value) {
148
		return "{'"+key+"':'"+value+"'}";
131
	private Bson getBasicQuery(final String key, final String value) {
132
		return new BasicDBObject(key, value);
149 133
	}
150
	private String getDateQuery(final Date startDate, final Date endDate) {
151
		return "{'" + LogMessage.LOG_DATE_FIELD + "' : {$gte:"+startDate.getTime()+"}, '" + LogMessage.LOG_DATE_FIELD + "' : {$lt:"+endDate.getTime()+"} }";
134

  
135
	private Bson getDateQuery(final Date startDate, final Date endDate) {
136
		return Filters.and(
137
				Filters.gte(LogMessage.LOG_DATE_FIELD, startDate.getTime()),
138
				Filters.lt(LogMessage.LOG_DATE_FIELD, endDate.getTime()));
152 139
	}
153
	private String getCustomQuery(final Map<String, Object> criteria) {
154
		final StringBuilder sb = new StringBuilder("{");
155
		for(Entry<String, Object> e : criteria.entrySet()) {
156
			sb.append("'" + e.getKey() + "':'" + e.getValue() + "', ");
157
		}
158
		return StringUtils.removeEnd(sb.toString(), ",") + "}";
140

  
141
	private Bson getCustomQuery(final Map<String, Object> criteria) {
142
		final BasicDBObjectBuilder b = new BasicDBObjectBuilder();
143
		criteria.forEach((k, v) -> b.add(k, v));
144
		return (BasicDBObject) b.get();
159 145
	}
160 146

  
161

  
162 147
	private Bson dateRangeQuery(final Date startDate, final Date endDate) {
163 148
		Bson dateFilter = Filters.and(Filters.gte(LogMessage.LOG_DATE_FIELD, startDate.getTime()), Filters.lt(LogMessage.LOG_DATE_FIELD, endDate.getTime()));
164 149
		log.debug("Date filter created: " + dateFilter);
......
166 151
		return dateFilter;
167 152
	}
168 153

  
169
	private Iterator<Map<String, String>> iter(final String collection, final MongoCursor<BasicDBObject> cursor) {
154
	private Iterator<Map<String, String>> iter(final MongoCursor<BasicDBObject> cursor) {
170 155
		return new Iterator<Map<String, String>>() {
171 156

  
172 157
			@Override

Also available in: Unified diff