Revision 42191
Added by Sandro La Bruzzo about 8 years ago
modules/dnet-data-provision-services/trunk/src/test/java/eu/dnetlib/data/oai/store/parser/MongoQueryParserTest.java | ||
---|---|---|
1 | 1 |
package eu.dnetlib.data.oai.store.parser; |
2 | 2 |
|
3 |
import static org.junit.Assert.assertEquals; |
|
4 |
|
|
5 | 3 |
import java.time.LocalDateTime; |
4 |
import java.time.ZoneId; |
|
6 | 5 |
import java.time.format.DateTimeFormatter; |
6 |
import java.util.Date; |
|
7 | 7 |
|
8 |
import com.google.common.collect.Lists; |
|
9 |
import com.mongodb.BasicDBObject; |
|
10 |
import com.mongodb.DBObject; |
|
11 |
import com.mongodb.util.JSON; |
|
12 |
import eu.dnetlib.oai.parser.MongoQueryParser; |
|
8 | 13 |
import org.apache.commons.logging.Log; |
9 | 14 |
import org.apache.commons.logging.LogFactory; |
10 | 15 |
import org.bson.conversions.Bson; |
11 | 16 |
import org.bson.types.ObjectId; |
12 | 17 |
import org.junit.Test; |
13 | 18 |
|
14 |
import com.google.common.collect.Lists; |
|
15 |
import com.mongodb.BasicDBObject; |
|
16 |
import com.mongodb.DBObject; |
|
17 |
import com.mongodb.util.JSON; |
|
19 |
import static org.junit.Assert.assertEquals; |
|
18 | 20 |
|
19 |
import eu.dnetlib.oai.parser.MongoQueryParser; |
|
20 |
|
|
21 | 21 |
public class MongoQueryParserTest { |
22 | 22 |
|
23 | 23 |
private static final Log log = LogFactory.getLog(MongoQueryParserTest.class); // NOPMD by marko on 11/24/08 5:02 PM |
... | ... | |
93 | 93 |
|
94 | 94 |
@Test |
95 | 95 |
public void testParseUntilDatestamp() { |
96 |
final LocalDateTime dateTime = this.parseDate("2014-04-03T00:00:00.000Z"); |
|
97 |
// { "$and" : [ { "oaftype" : { "$ne" : "person"}} , { "datestamp" : { "$lt" : { "$date" : "2014-04-03T00:00:00.000Z"}}}]} |
|
96 |
final Date dateTime = Date.from(this.parseDate("2014-04-03T00:00:00.000Z").atZone(ZoneId.systemDefault()).toInstant()); |
|
98 | 97 |
final BasicDBObject expected = |
99 | 98 |
new BasicDBObject("$and", Lists.newArrayList(new BasicDBObject("oaftype", new BasicDBObject("$ne", "person")), new BasicDBObject( |
100 | 99 |
"datestamp", new BasicDBObject("$lt", dateTime)))); |
101 |
// System.out.println(expected); |
|
102 | 100 |
final Bson o = this.mongoParser.parse("(oaftype <> \"person\") AND datestamp <= 2014-04-02"); |
101 |
System.out.println("o.toString() = " + expected.toString()); |
|
102 |
System.out.println("o.toString() = " + o.toString()); |
|
103 |
|
|
103 | 104 |
assertEquals(expected, o); |
104 |
// System.out.println(o); |
|
105 | 105 |
} |
106 | 106 |
|
107 | 107 |
@Test |
... | ... | |
114 | 114 |
private LocalDateTime parseDate(final String date) { |
115 | 115 |
final DateTimeFormatter dateNoTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
116 | 116 |
final DateTimeFormatter iso8601NoMsTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"); |
117 |
final DateTimeFormatter iso8601Formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'");;
|
|
117 |
final DateTimeFormatter iso8601Formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'"); |
|
118 | 118 |
try { |
119 | 119 |
System.err.println("Using default " + iso8601Formatter.getClass()); |
120 | 120 |
return LocalDateTime.parse(date, iso8601Formatter); |
modules/dnet-data-provision-services/trunk/src/main/java/eu/dnetlib/oai/parser/MongoQueryParser.java | ||
---|---|---|
1 | 1 |
package eu.dnetlib.oai.parser; |
2 | 2 |
|
3 | 3 |
import java.io.IOException; |
4 |
import java.time.LocalDate; |
|
4 | 5 |
import java.time.LocalDateTime; |
6 |
import java.time.ZoneId; |
|
5 | 7 |
import java.time.format.DateTimeFormatter; |
8 |
import java.util.Date; |
|
6 | 9 |
import java.util.List; |
7 | 10 |
|
8 |
import org.apache.commons.lang3.StringUtils; |
|
9 |
import org.apache.commons.logging.Log; |
|
10 |
import org.apache.commons.logging.LogFactory; |
|
11 |
import org.bson.conversions.Bson; |
|
12 |
import org.bson.types.ObjectId; |
|
13 |
import org.z3950.zing.cql.CQLAndNode; |
|
14 |
import org.z3950.zing.cql.CQLBooleanNode; |
|
15 |
import org.z3950.zing.cql.CQLNode; |
|
16 |
import org.z3950.zing.cql.CQLNotNode; |
|
17 |
import org.z3950.zing.cql.CQLOrNode; |
|
18 |
import org.z3950.zing.cql.CQLParseException; |
|
19 |
import org.z3950.zing.cql.CQLParser; |
|
20 |
import org.z3950.zing.cql.CQLTermNode; |
|
21 |
|
|
22 | 11 |
import com.google.common.collect.Lists; |
23 | 12 |
import com.mongodb.BasicDBObject; |
24 | 13 |
import com.mongodb.BasicDBObjectBuilder; |
25 |
|
|
26 | 14 |
import eu.dnetlib.index.parse.Relation; |
27 | 15 |
import eu.dnetlib.index.parse.Relations; |
28 | 16 |
import eu.dnetlib.oai.conf.OAIConfigurationReader; |
29 | 17 |
import eu.dnetlib.rmi.provision.OaiPublisherRuntimeException; |
18 |
import org.apache.commons.lang3.StringUtils; |
|
19 |
import org.apache.commons.logging.Log; |
|
20 |
import org.apache.commons.logging.LogFactory; |
|
21 |
import org.bson.conversions.Bson; |
|
22 |
import org.bson.types.ObjectId; |
|
23 |
import org.z3950.zing.cql.*; |
|
30 | 24 |
|
31 | 25 |
/** |
32 | 26 |
* Instances of this class parse query string into mongo DBObject query. |
... | ... | |
172 | 166 |
*/ |
173 | 167 |
if (date.onlyDate) { |
174 | 168 |
fromDate = date.date.plusDays(1); |
175 |
mongoQueryObject.put(indexName, new BasicDBObject("$lt", fromDate.toLocalDate()));
|
|
169 |
mongoQueryObject.put(indexName, new BasicDBObject("$lt", Date.from(fromDate.atZone(ZoneId.systemDefault()).toInstant())));
|
|
176 | 170 |
} else { |
177 |
mongoQueryObject.put(indexName, new BasicDBObject("$lte", fromDate.toLocalDate()));
|
|
171 |
mongoQueryObject.put(indexName, new BasicDBObject("$lte", Date.from(fromDate.atZone(ZoneId.systemDefault()).toInstant())));
|
|
178 | 172 |
} |
179 | 173 |
break; |
180 | 174 |
default: |
... | ... | |
213 | 207 |
|
214 | 208 |
final DateTimeFormatter dateNoTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
215 | 209 |
final DateTimeFormatter iso8601NoMsTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"); |
216 |
final DateTimeFormatter iso8601Formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ");
|
|
210 |
final DateTimeFormatter iso8601Formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'");
|
|
217 | 211 |
OAIDate res = null; |
218 | 212 |
try { |
219 | 213 |
log.debug("Using default " + iso8601Formatter.getClass()); |
... | ... | |
227 | 221 |
res = new OAIDate(dt, false); |
228 | 222 |
} catch (final Exception ex) { |
229 | 223 |
log.debug("Switching to simple date formatter: yyyy-MM-dd"); |
230 |
final LocalDateTime dt = LocalDateTime.parse(date, dateNoTimeFormatter);
|
|
224 |
final LocalDateTime dt = LocalDate.parse(date, dateNoTimeFormatter).atTime(0, 0);
|
|
231 | 225 |
res = new OAIDate(dt, true); |
232 | 226 |
} |
233 | 227 |
} |
Also available in: Unified diff
fixed Test