Package xbird.xquery.dm.value.xsi

Examples of xbird.xquery.dm.value.xsi.DurationValue


     */
    private static final class AddDurationToDateTime extends Exec {
        static final AddDurationToDateTime INSTANCE = new AddDurationToDateTime();

        public DateTimeValue eval(DynamicContext dynEnv, Item v1, Item v2) throws XQueryException {
            final DurationValue d1;
            final DateTimeValue dt2;
            if(v1 instanceof DurationValue) {
                d1 = (DurationValue) v1;
                dt2 = (DateTimeValue) v2;
            } else {
                d1 = (DurationValue) v2;
                dt2 = (DateTimeValue) v1;
            }
            XMLGregorianCalendar cal2 = dt2.getValue();
            cal2.add(d1.getValue());
            return new DateTimeValue(cal2, dt2.getDateTimeType());
        }
View Full Code Here


    private static final class DurationAdd extends Exec {
        static final DurationAdd INSTANCE = new DurationAdd();

        public DurationValue eval(DynamicContext dynEnv, Item v1, Item v2) throws XQueryException {
            DurationValue d1 = (DurationValue) v1;
            DurationValue d2 = (DurationValue) v2;
            Duration dv1 = d1.getValue();
            Duration res = dv1.add(d2.getValue());
            DurationType dt1 = d1.getDurationType();
            DurationType dt2 = d2.getDurationType();
            if(dt1 == dt2) {
                return new DurationValue(res, dt1);
            } else {
                return new DurationValue(res);
            }
        }
View Full Code Here

    public static final class DivDuration extends Exec {
        static final DivDuration INSTANCE = new DivDuration();

        public DurationValue eval(DynamicContext dynEnv, Item v1, Item v2) throws XQueryException {
            final DurationValue dur1;
            final double divisor;
            if(v1 instanceof DurationValue) {
                dur1 = (DurationValue) v1;
                divisor = NumericOp.asDouble(v2, dynEnv);
            } else {
                dur1 = (DurationValue) v2;
                divisor = NumericOp.asDouble(v1, dynEnv);
            }
            if(divisor == 0) {
                throw new DynamicError("err:FODT0002", "Overflow in duration arithmetic, divided by zero");
            }
            if(Double.isNaN(divisor)) {
                throw new DynamicError("err:FOCA0005", "$arg2 is NaN");
            }
            double res = 1.0 / divisor;
            DurationValue resDur = dur1.multiply(res);
            return resDur;
        }
View Full Code Here

    public static final class DivDurationByDuration extends Exec {
        static final DivDurationByDuration INSTANCE = new DivDurationByDuration();

        public XDecimal eval(DynamicContext dynEnv, Item v1, Item v2) throws XQueryException {
            DurationValue d1 = (DurationValue) v1;
            DurationValue d2 = (DurationValue) v2;

            final int dt1 = d1.getDurationType().getTypeId();
            final int dt2 = d2.getDurationType().getTypeId();
            if(dt1 == dt2) {
                if(dt1 == TypeTable.YEAR_MONTH_DURATION_TID) {
                    return evalYearMonthDuration(d1, d2);
                }
                //TODO else if(dt1 == TypeTable.DAYTIME_DURATION_TID) {}
            }

            final double divisor = d2.getTimeInMillis();
            if(divisor == 0) {
                throw new DynamicError("err:FODT0002", "Overflow in duration arithmetic, divided by zero");
            }
            if(Double.isNaN(divisor)) {
                throw new DynamicError("err:FOCA0005", "$arg2 is NaN");
View Full Code Here

    private static final class SubDurationFromDateTime extends Exec {
        static final SubDurationFromDateTime INSTANCE = new SubDurationFromDateTime();

        public DateTimeValue eval(DynamicContext dynEnv, Item v1, Item v2) throws XQueryException {
            final DurationValue d1;
            final DateTimeValue dt2;
            if(v1 instanceof DurationValue) {
                d1 = (DurationValue) v1;
                dt2 = (DateTimeValue) v2;
            } else {
                d1 = (DurationValue) v2;
                dt2 = (DateTimeValue) v1;
            }
            XMLGregorianCalendar cal2 = dt2.getValue();
            cal2.add(d1.getValue().negate());
            return new DateTimeValue(cal2, dt2.getDateTimeType());
        }
View Full Code Here

    private static final class DurationSub extends Exec {
        static final DurationSub INSTANCE = new DurationSub();

        public DurationValue eval(DynamicContext dynEnv, Item v1, Item v2) throws XQueryException {
            DurationValue d1 = (DurationValue) v1;
            DurationValue d2 = (DurationValue) v2;
            Duration dv1 = d1.getValue();
            Duration res = dv1.subtract(d2.getValue());
            DurationType dt1 = d1.getDurationType();
            DurationType dt2 = d2.getDurationType();
            if(dt1 == dt2) {
                return new DurationValue(res, dt1);
            } else {
                return new DurationValue(res);
            }
        }
View Full Code Here

            long l2 = d2.getValue().toGregorianCalendar().getTimeInMillis();
            Duration d = XsDatatypeFactory.createDuration(l1 - l2);
            DateTimeBaseType dt1 = d1.getDateTimeType();
            DateTimeBaseType dt2 = d2.getDateTimeType();
            if(dt1 == dt2 && (dt1.getTypeId() == TypeTable.YEAR_MONTH_DURATION_TID)) {
                return new DurationValue(d, YearMonthDurationType.YEARMONTH_DURATION);
            } else {
                return new DurationValue(d, DayTimeDurationType.DAYTIME_DURATION);
            }
        }
View Full Code Here

    private static final class MulDuration extends Exec {
        static final MulDuration INSTANCE = new MulDuration();

        public DurationValue eval(DynamicContext dynEnv, Item v1, Item v2) throws XQueryException {
            final DurationValue dur1;
            final double d2;
            if(v1 instanceof DurationValue) {
                dur1 = (DurationValue) v1;
                d2 = asDouble(v2, dynEnv);
            } else {
                dur1 = (DurationValue) v2;
                d2 = asDouble(v1, dynEnv);
            }
            if(Double.isNaN(d2)) {
                throw new DynamicError("err:FOCA0005", "Illegally multiplying with NaN.");
            }
            if(Double.isInfinite(d2)) {
                throw new DynamicError("err:FODT0002", "Duration value is too large or too small to be represented.");
            }
            DurationType dt = dur1.getDurationType();
            final Duration res;
            final int dt1 = dt.getTypeId();
            if(dt1 == TypeTable.YEAR_MONTH_DURATION_TID) {
                int months = dur1.totalMonths();
                long ym = Math.round(months * d2);
                res = XsDatatypeFactory.createYearMonthDuration(ym);
            } else {
                Duration dv1 = dur1.getValue();
                res = dv1.multiply(BigDecimal.valueOf(d2));
            }
            return new DurationValue(res, dt);
        }
View Full Code Here

    public Sequence eval(Sequence<? extends Item> contextSeq, ValueSequence argv, DynamicContext dynEnv)
            throws XQueryException {
        TimeZone tz = dynEnv.implicitTimezone();
        int utcOffset = tz.getOffset(0);
        final Duration d = XsDatatypeFactory.createDuration(utcOffset);
        return new DurationValue(d, DayTimeDurationType.DAYTIME_DURATION);
    }
View Full Code Here

            if(tzOffsetInMinutes == DatatypeConstants.FIELD_UNDEFINED) {
                return null;
            }
            long offsetInMillis = tzOffsetInMinutes * 60 * 1000;
            final Duration dur = XsDatatypeFactory.createDuration(offsetInMillis);
            return new DurationValue(dur, DayTimeDurationType.DAYTIME_DURATION);
        }
View Full Code Here

TOP

Related Classes of xbird.xquery.dm.value.xsi.DurationValue

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.