package ch.vorburger.el.validation; import org.eclipse.xtext.validation.Check; import org.eclipse.xtext.xbase.validation.XbaseJavaValidator; import ch.vorburger.el.eL.DateLiteral; import ch.vorburger.el.eL.DateTimeLiteral; import ch.vorburger.el.eL.ELPackage; import ch.vorburger.el.lib.DateExtensions; @SuppressWarnings("restriction") public class ELJavaValidator extends XbaseJavaValidator { @Check public void checkValidDate(DateLiteral date) { try { int[] args = DateExtensions.getGregorianCalendarConstructorArgs(date.getValue()); if(args[0]<1000 || args[0]>3000) { // check year error("No valid year in the given date", ELPackage.Literals.DATE_LITERAL__VALUE); } if(args[1]<0 || args[1]>11) { // check month error("No valid month in the given date", ELPackage.Literals.DATE_LITERAL__VALUE); } if(args[2]<1 || args[2]>31) { // check day error("No valid day in the given date", ELPackage.Literals.DATE_LITERAL__VALUE); } } catch(RuntimeException e) { error(e.getMessage(), ELPackage.Literals.DATE_LITERAL__VALUE); } } @Check public void checkValidDateTime(DateTimeLiteral date) { try { int[] args = DateExtensions.getGregorianCalendarConstructorArgs(date.getValue()); if(args[0]<1000 || args[0]>3000) { // check year error("No valid year in the given date", ELPackage.Literals.DATE_TIME_LITERAL__VALUE); } if(args[1]<0 || args[1]>11) { // check month error("No valid month in the given date", ELPackage.Literals.DATE_TIME_LITERAL__VALUE); } if(args[2]<1 || args[2]>31) { // check day error("No valid day in the given date", ELPackage.Literals.DATE_TIME_LITERAL__VALUE); } if(args[3]<0 || args[3]>23) { // check hour error("No valid hour in the given time", ELPackage.Literals.DATE_TIME_LITERAL__VALUE); } if(args[4]<0 || args[4]>59) { // check minute error("No valid minute in the given time", ELPackage.Literals.DATE_TIME_LITERAL__VALUE); } if(args[5]<0 || args[5]>59) { // check second error("No valid second in the given time", ELPackage.Literals.DATE_TIME_LITERAL__VALUE); } } catch(RuntimeException e) { error(e.getMessage(), ELPackage.Literals.DATE_TIME_LITERAL__VALUE); } } }