Add support for TODAY constant in Wikidata schemas
This commit is contained in:
parent
43980e69dd
commit
80eea8635b
@ -36,7 +36,6 @@ import java.util.regex.Pattern;
|
|||||||
import org.jsoup.helper.Validate;
|
import org.jsoup.helper.Validate;
|
||||||
import org.openrefine.wikidata.schema.exceptions.SkipSchemaExpressionException;
|
import org.openrefine.wikidata.schema.exceptions.SkipSchemaExpressionException;
|
||||||
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
||||||
import org.wikidata.wdtk.datamodel.interfaces.EntityIdValue;
|
|
||||||
import org.wikidata.wdtk.datamodel.interfaces.TimeValue;
|
import org.wikidata.wdtk.datamodel.interfaces.TimeValue;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
@ -106,9 +105,22 @@ public class WbDateConstant implements WbExpression<TimeValue> {
|
|||||||
int precision = 0; // default precision (will be overridden if successfully parsed)
|
int precision = 0; // default precision (will be overridden if successfully parsed)
|
||||||
int maxLength = 0; // the maximum length parsed
|
int maxLength = 0; // the maximum length parsed
|
||||||
String calendarIri = TimeValue.CM_GREGORIAN_PRO; // Gregorian calendar is assumed by default
|
String calendarIri = TimeValue.CM_GREGORIAN_PRO; // Gregorian calendar is assumed by default
|
||||||
|
|
||||||
|
String trimmedDatestamp = datestamp.trim();
|
||||||
|
|
||||||
|
if("TODAY".equals(trimmedDatestamp)) {
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
TimeValue todaysDate = Datamodel.makeTimeValue(
|
||||||
|
calendar.get(Calendar.YEAR),
|
||||||
|
(byte)calendar.get(Calendar.MONTH),
|
||||||
|
(byte)calendar.get(Calendar.DAY_OF_MONTH),
|
||||||
|
(byte)0, (byte)0, (byte)0, (byte)11, 0,0,0, TimeValue.CM_GREGORIAN_PRO);
|
||||||
|
return todaysDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for (Entry<SimpleDateFormat, Integer> entry : acceptedFormats.entrySet()) {
|
for (Entry<SimpleDateFormat, Integer> entry : acceptedFormats.entrySet()) {
|
||||||
ParsePosition position = new ParsePosition(0);
|
ParsePosition position = new ParsePosition(0);
|
||||||
String trimmedDatestamp = datestamp.trim();
|
|
||||||
Date date = entry.getKey().parse(trimmedDatestamp, position);
|
Date date = entry.getKey().parse(trimmedDatestamp, position);
|
||||||
|
|
||||||
if (date == null) {
|
if (date == null) {
|
||||||
|
@ -23,6 +23,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package org.openrefine.wikidata.schema;
|
package org.openrefine.wikidata.schema;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
import org.openrefine.wikidata.testing.JacksonSerializationTest;
|
import org.openrefine.wikidata.testing.JacksonSerializationTest;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
||||||
@ -87,6 +89,17 @@ public class WbDateConstantTest extends WbExpressionTest<TimeValue> {
|
|||||||
TimeValue.CM_JULIAN_PRO), julianDay);
|
TimeValue.CM_JULIAN_PRO), julianDay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testToday() {
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
TimeValue expectedDate = Datamodel.makeTimeValue(
|
||||||
|
calendar.get(Calendar.YEAR),
|
||||||
|
(byte)calendar.get(Calendar.MONTH),
|
||||||
|
(byte)calendar.get(Calendar.DAY_OF_MONTH),
|
||||||
|
(byte)0, (byte)0, (byte)0, (byte)11, 0,0,0, TimeValue.CM_GREGORIAN_PRO);
|
||||||
|
evaluatesTo(expectedDate, new WbDateConstant("TODAY"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test(expectedExceptions = IllegalArgumentException.class)
|
@Test(expectedExceptions = IllegalArgumentException.class)
|
||||||
public void testInvalid() {
|
public void testInvalid() {
|
||||||
new WbDateConstant("invalid format");
|
new WbDateConstant("invalid format");
|
||||||
|
Loading…
Reference in New Issue
Block a user