[ONOS-8031]Yang revision date are stored with default timezone
Change-Id: I14265b2e6c2f2b82f183f6317f79ec675dbc085c
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListener.java
index e51c33b..b299b66 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListener.java
@@ -22,7 +22,7 @@
import org.onosproject.yang.compiler.parser.exceptions.ParserException;
import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
-import java.util.Date;
+import java.time.LocalDate;
import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REVISION_DATE_DATA;
import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionDateStatementContext;
@@ -88,7 +88,7 @@
checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATE_DATA, ctx.dateArgumentString().getText(),
ENTRY);
- Date date = getValidDateFromString(ctx.dateArgumentString().getText(), ctx);
+ LocalDate date = getValidDateFromString(ctx.dateArgumentString().getText(), ctx);
// Obtain the node of the stack.
Parsable tmpNode = listener.getParsedDataStack().peek();
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListener.java
index 5868328..f3ba93d 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListener.java
@@ -23,7 +23,7 @@
import org.onosproject.yang.compiler.parser.exceptions.ParserException;
import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
-import java.util.Date;
+import java.time.LocalDate;
import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REVISION_DATA;
import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionStatementContext;
@@ -89,7 +89,7 @@
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.dateArgumentString().getText(), ENTRY);
- Date date = getValidDateFromString(ctx.dateArgumentString().getText(), ctx);
+ LocalDate date = getValidDateFromString(ctx.dateArgumentString().getText(), ctx);
YangRevision revisionNode = new YangRevision();
revisionNode.setRevDate(date);
@@ -123,8 +123,8 @@
case MODULE_DATA: {
YangModule module = (YangModule) tmpNode;
if (module.getRevision() != null) {
- Date curRevisionDate = module.getRevision().getRevDate();
- if (curRevisionDate.before(((YangRevision) tmpRevisionNode).getRevDate())) {
+ LocalDate curRevisionDate = module.getRevision().getRevDate();
+ if (curRevisionDate.isBefore(((YangRevision) tmpRevisionNode).getRevDate())) {
module.setRevision((YangRevision) tmpRevisionNode);
}
} else {
@@ -135,8 +135,8 @@
case SUB_MODULE_DATA: {
YangSubModule subModule = (YangSubModule) tmpNode;
if (subModule.getRevision() != null) {
- Date curRevisionDate = subModule.getRevision().getRevDate();
- if (curRevisionDate.before(((YangRevision) tmpRevisionNode).getRevDate())) {
+ LocalDate curRevisionDate = subModule.getRevision().getRevDate();
+ if (curRevisionDate.isBefore(((YangRevision) tmpRevisionNode).getRevDate())) {
subModule.setRevision((YangRevision) tmpRevisionNode);
}
} else {
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java
index 538e863..7d8c5a1 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java
@@ -39,10 +39,8 @@
import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaAugmentTranslator;
import org.slf4j.Logger;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.time.LocalDate;
import java.util.ArrayList;
-import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
@@ -70,6 +68,7 @@
import static org.onosproject.yang.compiler.utils.UtilConstants.CURRENT;
import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
import static org.onosproject.yang.compiler.utils.UtilConstants.FALSE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HYPHEN;
import static org.onosproject.yang.compiler.utils.UtilConstants.IN;
import static org.onosproject.yang.compiler.utils.UtilConstants.INVALID_TREE;
import static org.onosproject.yang.compiler.utils.UtilConstants.ONE;
@@ -103,6 +102,8 @@
Pattern.compile("\\[(.*?)\\]");
private static final String XML = "xml";
private static final int IDENTIFIER_LENGTH = 64;
+ private static final int VALUE_CHECK = 10;
+ private static final int ZERO = 0;
private static final String DATE_FORMAT = "yyyy-MM-dd";
private static final String REGEX_EQUAL = "[=]";
private static final String REGEX_OPEN_BRACE = "[(]";
@@ -173,30 +174,6 @@
}
/**
- * Validates the revision date.
- *
- * @param dateToValidate input revision date
- * @return validation result, true for success, false for failure
- */
- public static boolean isDateValid(String dateToValidate) {
- if (dateToValidate == null || !dateToValidate.matches(DATE_PATTERN)) {
- return false;
- }
-
- SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
- sdf.setLenient(false);
-
- try {
- //if not valid, it will throw ParseException
- sdf.parse(dateToValidate);
- } catch (ParseException e) {
- return false;
- }
-
- return true;
- }
-
- /**
* Validates YANG version.
*
* @param ctx version context object of the grammar rule
@@ -311,27 +288,6 @@
}
/**
- * Returns current date and makes it in usable format for revision.
- *
- * @return usable current date format for revision
- */
- public static Date getCurrentDateForRevision() {
-
- SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
-
- Date date = new Date();
- String dateInString = dateFormat.format(date);
- try {
- //if not valid, it will throw ParseException
- Date now = dateFormat.parse(dateInString);
- return date;
- } catch (ParseException e) {
- ParserException parserException = new ParserException("YANG file error: Input date is not correct");
- throw parserException;
- }
- }
-
- /**
* Checks and return valid node identifier.
*
* @param nodeIdentifierString string from yang file
@@ -630,7 +586,7 @@
* @param ctx yang construct's context to get the line number and character position
* @return date format for revision
*/
- public static Date getValidDateFromString(String dateInString, ParserRuleContext ctx) {
+ public static LocalDate getValidDateFromString(String dateInString, ParserRuleContext ctx) {
String dateArgument = removeQuotesAndHandleConcat(dateInString);
if (!dateArgument.matches(DATE_PATTERN)) {
ParserException parserException = new ParserException("YANG file error: Input date is not correct");
@@ -639,18 +595,20 @@
throw parserException;
}
- SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
- sdf.setLenient(false);
+ String[] revisionArr = dateArgument.toString().split(HYPHEN);
- try {
- //if not valid, it will throw ParseException
- return sdf.parse(dateArgument);
- } catch (ParseException e) {
- ParserException parserException = new ParserException("YANG file error: Input date is not correct");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
+ StringBuilder rev = new StringBuilder(revisionArr[0]);
+ for (int i = 1; i < revisionArr.length; i++) {
+ rev.append(HYPHEN);
+ Integer val = Integer.parseInt(revisionArr[i]);
+ if (val < VALUE_CHECK) {
+ rev.append(ZERO);
+ }
+ rev.append(val);
}
+
+ //if not valid, it will throw ParseException
+ return LocalDate.parse(rev);
}
/**
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ImportListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ImportListenerTest.java
index 31ba584..b47c957 100644
--- a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ImportListenerTest.java
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ImportListenerTest.java
@@ -24,7 +24,7 @@
import java.io.IOException;
import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.time.LocalDate;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
@@ -35,8 +35,6 @@
public class ImportListenerTest {
private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private static final String DATE_FORMAT = "yyyy-MM-dd";
- private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
/**
* Checks if mandatory parameter prefix is present in import.
@@ -74,7 +72,7 @@
YangNode node = manager.getDataModel("src/test/resources/ImportValidEntry.yang");
// Checks for the revision value in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
+ assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(LocalDate.parse("2015-02-03")));
// Checks for the prefix id in data model tree.
assertThat(((YangModule) node).getImportList().get(0).getPrefixId(), is("On2"));
// Checks for the module name in data model tree.
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/IncludeListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/IncludeListenerTest.java
index db549de..c25d02f 100644
--- a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/IncludeListenerTest.java
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/IncludeListenerTest.java
@@ -24,7 +24,7 @@
import java.io.IOException;
import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.time.LocalDate;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
@@ -35,8 +35,6 @@
public class IncludeListenerTest {
private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private static final String DATE_FORMAT = "yyyy-MM-dd";
- private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
/**
* Checks if include listener with ; is valid and updates the data
@@ -75,7 +73,7 @@
// Checks for the sub module name in data model tree.
assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(LocalDate.parse("2016-02-03")));
}
/**
@@ -88,9 +86,9 @@
// Checks for the sub module name in data model tree.
assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(LocalDate.parse("2016-02-03")));
assertThat(((YangModule) node).getIncludeList().get(1).getSubModuleName(), is("sdn"));
- assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(LocalDate.parse("2014-02-03")));
}
/**
@@ -103,9 +101,9 @@
// Checks for the sub module name in data model tree.
assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(LocalDate.parse("2016-02-03")));
assertThat(((YangModule) node).getIncludeList().get(1).getSubModuleName(), is("sdn"));
- assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(LocalDate.parse("2014-02-03")));
}
/**
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListenerTest.java
index 7f088e8..27ffe05 100644
--- a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListenerTest.java
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListenerTest.java
@@ -24,7 +24,8 @@
import java.io.IOException;
import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeParseException;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
@@ -35,8 +36,6 @@
public class RevisionDateListenerTest {
private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private static final String DATE_FORMAT = "yyyy-MM-dd";
- private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
/**
* Checks if revision date syntax is correct in include.
@@ -64,9 +63,9 @@
YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtInclude.yang");
// Checks for the version value in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
+ assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(LocalDate.parse("2015-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(LocalDate.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(LocalDate.parse("2014-02-03")));
}
/**
@@ -77,9 +76,9 @@
YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtImport.yang");
// Checks for the version value in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
+ assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(LocalDate.parse("2015-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(LocalDate.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(LocalDate.parse("2014-02-03")));
}
/**
@@ -94,7 +93,7 @@
/**
* Checks if revision date is correct.
*/
- @Test(expected = ParserException.class)
+ @Test(expected = DateTimeParseException.class)
public void processRevisionDateInvalid() throws IOException, ParserException {
YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalid.yang");
@@ -109,8 +108,8 @@
YangNode node = manager.getDataModel("src/test/resources/RevisionDateValidEntry.yang");
// Checks for the version value in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
+ assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(LocalDate.parse("2015-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(LocalDate.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(LocalDate.parse("2014-02-03")));
}
}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListenerTest.java
index 8c7a816..0ce6886 100644
--- a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListenerTest.java
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListenerTest.java
@@ -24,7 +24,7 @@
import java.io.IOException;
import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.time.LocalDate;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
@@ -35,8 +35,6 @@
public class RevisionListenerTest {
private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private static final String DATE_FORMAT = "yyyy-MM-dd";
- private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
/**
* Checks if revision doesn't have optional parameters "revision and
@@ -47,7 +45,7 @@
YangNode node = manager.getDataModel("src/test/resources/RevisionNoOptionalParameter.yang");
// Checks for the version value in data model tree.
- assertThat(((YangModule) node).getRevision().getRevDate(), is(simpleDateFormat.parse("2016-02-03")));
+ assertThat(((YangModule) node).getRevision().getRevDate(), is(LocalDate.parse("2016-02-03")));
}
/**
@@ -85,6 +83,33 @@
public void processWithMultipleRevision() throws IOException, ParserException, ParseException {
YangNode node = manager.getDataModel("src/test/resources/MultipleRevision.yang");
- assertThat((node).getRevision().getRevDate(), is(simpleDateFormat.parse("2013-07-15")));
+ assertThat((node).getRevision().getRevDate(), is(LocalDate.parse("2013-07-15")));
+ }
+
+ /**
+ * Checks revision month of date in single digit format.
+ */
+ @Test
+ public void processRevisionDateWithSingleDigitMonth() throws IOException, ParserException, ParseException {
+ YangNode node = manager.getDataModel("src/test/resources/RevisionMonthSingleDigit.yang");
+ assertThat((node).getRevision().getRevDate(), is(LocalDate.parse("2013-07-15")));
+ }
+
+ /**
+ * Checks revision day in single digit format.
+ */
+ @Test
+ public void processRevisionDateWithSingleDigitDay() throws IOException, ParserException, ParseException {
+ YangNode node = manager.getDataModel("src/test/resources/RevisionDaySingleDigit.yang");
+ assertThat((node).getRevision().getRevDate(), is(LocalDate.parse("2013-10-07")));
+ }
+
+ /**
+ * Checks revision day and month in single digit format.
+ */
+ @Test
+ public void processRevisionDateWithSingleDigitDayMonth() throws IOException, ParserException, ParseException {
+ YangNode node = manager.getDataModel("src/test/resources/RevisionDayMonthSingleDigit.yang");
+ assertThat((node).getRevision().getRevDate(), is(LocalDate.parse("2013-07-07")));
}
}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/resources/RevisionDayMonthSingleDigit.yang b/compiler/base/parser/src/test/resources/RevisionDayMonthSingleDigit.yang
new file mode 100755
index 0000000..96686cb
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/RevisionDayMonthSingleDigit.yang
@@ -0,0 +1,17 @@
+module Test {
+ yang-version 1;
+ namespace urn:ietf:params:xml:ns:yang:ietf-ospf;
+ prefix test;
+
+ revision 2013-7-7 {
+ description
+ "This revision adds the following new data types:
+ - yang-identifier
+ - hex-string
+ - uuid
+ - dotted-quad";
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+}
diff --git a/compiler/base/parser/src/test/resources/RevisionDaySingleDigit.yang b/compiler/base/parser/src/test/resources/RevisionDaySingleDigit.yang
new file mode 100755
index 0000000..0c60001
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/RevisionDaySingleDigit.yang
@@ -0,0 +1,17 @@
+module Test {
+ yang-version 1;
+ namespace urn:ietf:params:xml:ns:yang:ietf-ospf;
+ prefix test;
+
+ revision 2013-10-7 {
+ description
+ "This revision adds the following new data types:
+ - yang-identifier
+ - hex-string
+ - uuid
+ - dotted-quad";
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+}
diff --git a/compiler/base/parser/src/test/resources/RevisionMonthSingleDigit.yang b/compiler/base/parser/src/test/resources/RevisionMonthSingleDigit.yang
new file mode 100755
index 0000000..6e75f73
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/RevisionMonthSingleDigit.yang
@@ -0,0 +1,17 @@
+module Test {
+ yang-version 1;
+ namespace urn:ietf:params:xml:ns:yang:ietf-ospf;
+ prefix test;
+
+ revision 2013-7-15 {
+ description
+ "This revision adds the following new data types:
+ - yang-identifier
+ - hex-string
+ - uuid
+ - dotted-quad";
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+}