Example usage for org.joda.time Interval getStartMillis

List of usage examples for org.joda.time Interval getStartMillis

Introduction

In this page you can find the example usage for org.joda.time Interval getStartMillis.

Prototype

public long getStartMillis() 

Source Link

Document

Gets the start of this time interval which is inclusive.

Usage

From source file:org.gephi.desktop.timeline.TickGraph.java

License:Open Source License

private void drawDate(Graphics2D g) {
    int width = parameters.getWidth();
    int height = parameters.getHeight();

    //Font/*w  w  w  .  ja va2  s  . com*/
    int fontSize = Math.min(parameters.getFontSize(), (int) (height / 4.));
    fontSize = fontSize > parameters.getFontSize() / 4 && fontSize <= parameters.getFontSize() / 2
            ? parameters.getFontSize() / 2
            : fontSize;
    FontMetrics smallMetrics = null;
    Font smallFont = parameters.getFont();
    Font bigFont;
    FontMetrics bigMetrics;
    if (smallFont != null && fontSize > parameters.getFontSize() / 4) {
        smallFont = smallFont.deriveFont(Font.PLAIN, fontSize);
        smallMetrics = g.getFontMetrics(smallFont);
        bigFont = smallFont.deriveFont(Font.PLAIN, (int) (fontSize * 2.5));
        bigMetrics = g.getFontMetrics(bigFont);
    } else {
        smallFont = null;
        bigFont = null;
    }

    DateTick dateTick = DateTick.create(min, max, width);

    int TOP_TICK = 0;
    int LOWER_TICK = 1;

    //Lower tick
    if (dateTick.getTypeCount() > 1) {
        g.setFont(smallFont);
        g.setColor(parameters.getDateColor(LOWER_TICK));
        Interval[] intervals = dateTick.getIntervals(LOWER_TICK);
        int labelWidth = smallMetrics != null ? smallMetrics.stringWidth("0000") : 0;
        for (Interval interval : intervals) {
            long ms = interval.getStartMillis();
            int x = dateTick.getTickPixelPosition(ms, width);
            if (x >= 0) {
                g.setColor(parameters.getDateColor(LOWER_TICK));

                //Height
                int h = (int) (Math.min(40, (int) (height / 15.0)));

                //Draw line
                g.drawLine(x, 0, x, h);

                //Label                       
                if (smallFont != null && width / intervals.length > labelWidth) {
                    String label = dateTick.getTickValue(LOWER_TICK, interval.getStart());
                    int xLabel = x + 4;
                    g.setColor(parameters.getDateColor(1));
                    int y = (int) (fontSize * 1.2);

                    g.drawString(label, xLabel, y);
                }
            }
        }
    }

    //Top tick
    if (dateTick.getTypeCount() > 0) {
        g.setFont(bigFont);
        g.setColor(parameters.getDateColor(TOP_TICK));
        Interval[] intervals = dateTick.getIntervals(TOP_TICK);
        for (Interval interval : intervals) {
            long ms = interval.getStartMillis();
            int x = dateTick.getTickPixelPosition(ms, width);
            if (x >= 0) {
                g.setColor(parameters.getDateColor(TOP_TICK));

                //Height
                int h = height;

                //Draw Line
                g.drawLine(x, 0, x, h);

                //Label
                if (bigFont != null) {
                    String label = dateTick.getTickValue(TOP_TICK, interval.getStart());
                    int xLabel = x + 4;
                    g.setColor(parameters.getDateColor(TOP_TICK));
                    int y = (int) (fontSize * 4);

                    g.drawString(label, xLabel, y);
                }
            } else if (x > ((dateTick.getTickPixelPosition(interval.getEndMillis(), width) - x) / -2)) {

                if (bigFont != null) {
                    String label = dateTick.getTickValue(TOP_TICK, interval.getStart());
                    g.setColor(parameters.getDateColor(TOP_TICK));
                    int y = (int) (fontSize * 4);

                    g.drawString(label, 4, y);
                }
            }
        }
    }
}

From source file:org.hawkular.metrics.api.jaxrs.influx.InfluxSeriesHandler.java

License:Apache License

private void select(AsyncResponse asyncResponse, String tenantId, SelectQueryContext selectQueryContext) {

    SelectQueryDefinitionsParser definitionsParser = new SelectQueryDefinitionsParser();
    parseTreeWalker.walk(definitionsParser, selectQueryContext);

    SelectQueryDefinitions queryDefinitions = definitionsParser.getSelectQueryDefinitions();

    try {//ww  w.ja va2s  .c o m
        queryValidator.validateSelectQuery(queryDefinitions);
    } catch (IllegalQueryException e) {
        StringValue errMsg = new StringValue("Illegal query: " + e.getMessage());
        asyncResponse.resume(Response.status(Status.BAD_REQUEST).entity(errMsg).build());
        return;
    }

    String metric = queryDefinitions.getFromClause().getName(); // metric to query from backend
    BooleanExpression whereClause = queryDefinitions.getWhereClause();
    Interval timeInterval;
    if (whereClause == null) {
        timeInterval = new Interval(new Instant(0), Instant.now());
    } else {
        timeInterval = toIntervalTranslator.toInterval(whereClause);
    }
    if (timeInterval == null) {
        StringValue errMsg = new StringValue("Invalid time interval");
        asyncResponse.resume(Response.status(Status.BAD_REQUEST).entity(errMsg).build());
        return;
    }
    String columnName = getColumnName(queryDefinitions);

    ListenableFuture<Boolean> idExistsFuture = metricsService.idExists(metric);
    ListenableFuture<List<NumericData>> loadMetricsFuture = Futures.transform(idExistsFuture,
            (AsyncFunction<Boolean, List<NumericData>>) idExists -> {
                if (idExists != Boolean.TRUE) {
                    return Futures.immediateFuture(null);
                }
                return metricsService.findData(new NumericMetric(tenantId, new MetricId(metric)),
                        timeInterval.getStartMillis(), timeInterval.getEndMillis());
            });
    ListenableFuture<List<InfluxObject>> influxObjectTranslatorFuture = Futures.transform(loadMetricsFuture,
            (List<NumericData> metrics) -> {
                if (metrics == null) {
                    return null;
                }

                if (shouldApplyMapping(queryDefinitions)) {
                    GroupByClause groupByClause = queryDefinitions.getGroupByClause();
                    InfluxTimeUnit bucketSizeUnit = groupByClause.getBucketSizeUnit();
                    long bucketSizeSec = bucketSizeUnit.convertTo(SECONDS, groupByClause.getBucketSize());
                    AggregatedColumnDefinition aggregatedColumnDefinition = (AggregatedColumnDefinition) queryDefinitions
                            .getColumnDefinitions().get(0);
                    metrics = applyMapping(aggregatedColumnDefinition.getAggregationFunction(),
                            aggregatedColumnDefinition.getAggregationFunctionArguments(), metrics,
                            (int) bucketSizeSec, timeInterval.getStartMillis(), timeInterval.getEndMillis());
                }

                if (!queryDefinitions.isOrderDesc()) {
                    metrics = Lists.reverse(metrics);
                }

                if (queryDefinitions.getLimitClause() != null) {
                    metrics = metrics.subList(0, queryDefinitions.getLimitClause().getLimit());
                }

                List<InfluxObject> objects = new ArrayList<>(1);

                List<String> columns = new ArrayList<>(2);
                columns.add("time");
                columns.add(columnName);

                InfluxObject.Builder builder = new InfluxObject.Builder(metric, columns)
                        .withForeseenPoints(metrics.size());

                for (NumericData m : metrics) {
                    List<Object> data = new ArrayList<>();
                    data.add(m.getTimestamp());
                    data.add(m.getValue());
                    builder.addPoint(data);
                }

                objects.add(builder.createInfluxObject());

                return objects;
            });
    Futures.addCallback(influxObjectTranslatorFuture, new FutureCallback<List<InfluxObject>>() {
        @Override
        public void onSuccess(List<InfluxObject> objects) {
            if (objects == null) {
                StringValue val = new StringValue("Metric with id [" + metric + "] not found. ");
                asyncResponse.resume(Response.status(404).entity(val).build());
            } else {
                ResponseBuilder builder = Response.ok(objects);
                asyncResponse.resume(builder.build());
            }
        }

        @Override
        public void onFailure(Throwable t) {
            asyncResponse.resume(t);
        }
    });
}

From source file:org.jasig.portlet.calendar.adapter.CalDavCalendarAdapter.java

License:Apache License

protected final Set<VEvent> convertCalendarToEvents(net.fortuna.ical4j.model.Calendar calendar,
        Interval interval) throws CalendarException {

    Period period = new Period(new net.fortuna.ical4j.model.DateTime(interval.getStartMillis()),
            new net.fortuna.ical4j.model.DateTime(interval.getEndMillis()));

    Set<VEvent> events = new HashSet<VEvent>();

    // if the calendar is null, return empty set
    if (calendar == null) {
        log.info("calendar empty, returning empty set");
        return Collections.emptySet();
    }//  ww w.  j  ava2  s  . c o  m

    // retrieve the list of events for this calendar within the
    // specified time period
    for (Iterator<Component> i = calendar.getComponents().iterator(); i.hasNext();) {
        Component component = i.next();
        if (component.getName().equals("VEVENT")) {
            VEvent event = (VEvent) component;
            if (log.isTraceEnabled()) {
                log.trace("processing event " + event.getSummary().getValue());
            }
            // calculate the recurrence set for this event
            // for the specified time period
            PeriodList periods = event.calculateRecurrenceSet(period);

            // add each recurrence instance to the event list
            for (Iterator<Period> iter = periods.iterator(); iter.hasNext();) {
                Period eventper = iter.next();

                PropertyList props = event.getProperties();

                // create a new property list, setting the date
                // information to this event period
                PropertyList newprops = new PropertyList();
                newprops.add(new DtStart(eventper.getStart()));
                newprops.add(new DtEnd(eventper.getEnd()));
                for (Iterator<Property> iter2 = props.iterator(); iter2.hasNext();) {
                    Property prop = iter2.next();

                    // only add non-date-related properties
                    if (!(prop instanceof DtStart) && !(prop instanceof DtEnd) && !(prop instanceof Duration)
                            && !(prop instanceof RRule))
                        newprops.add(prop);
                }

                // create the new event from our property list
                VEvent newevent = new VEvent(newprops);
                events.add(newevent);
                if (log.isTraceEnabled()) {
                    log.trace("added event " + newevent);
                }
            }
        }
    }

    return events;
}

From source file:org.jasig.portlet.calendar.processor.ICalendarContentProcessorImpl.java

License:Apache License

/**
 * //from  w  w  w. j  ava  2s  . c o m
 * @param calendar
 * @param interval
 * @return
 * @throws CalendarException
 */
@SuppressWarnings("unchecked")
protected final Set<VEvent> convertCalendarToEvents(net.fortuna.ical4j.model.Calendar calendar,
        Interval interval) throws CalendarException {

    Period period = new Period(new net.fortuna.ical4j.model.DateTime(interval.getStartMillis()),
            new net.fortuna.ical4j.model.DateTime(interval.getEndMillis()));

    Set<VEvent> events = new HashSet<VEvent>();

    // if the calendar is null, return empty set
    if (calendar == null) {
        log.warn("calendar was empty, returning empty set");
        return Collections.emptySet();
    }

    // retrieve the list of events for this calendar within the
    // specified time period
    for (Iterator<Component> it = calendar.getComponents().iterator(); it.hasNext();) {
        /*
         * CAP-143:  Log a warning and ignore events that cannot be 
         * processed at this stage
         */
        Component component = it.next();
        try {
            if (component.getName().equals("VEVENT")) {
                VEvent event = (VEvent) component;
                if (log.isTraceEnabled()) {
                    log.trace("processing event " + event.getSummary());
                }
                // calculate the recurrence set for this event
                // for the specified time period
                PeriodList periods = event.calculateRecurrenceSet(period);

                // add each recurrence instance to the event list
                for (Iterator<Period> iter = periods.iterator(); iter.hasNext();) {
                    Period eventper = iter.next();
                    if (log.isDebugEnabled()) {
                        log.debug("Found time period staring at " + eventper.getStart().isUtc() + ", "
                                + eventper.getStart().getTimeZone() + ", " + event.getStartDate().getTimeZone()
                                + ", " + event.getStartDate().isUtc());
                    }

                    PropertyList props = event.getProperties();

                    // create a new property list, setting the date
                    // information to this event period
                    PropertyList newprops = new PropertyList();
                    DtStart start;
                    if (event.getStartDate().getDate() instanceof net.fortuna.ical4j.model.DateTime) {
                        start = new DtStart(new net.fortuna.ical4j.model.DateTime(eventper.getStart()));
                    } else {
                        start = new DtStart(new net.fortuna.ical4j.model.Date(eventper.getStart()));
                    }
                    newprops.add(start);
                    if (event.getEndDate() != null) {
                        DtEnd end;
                        if (event.getEndDate().getDate() instanceof net.fortuna.ical4j.model.DateTime) {
                            end = new DtEnd(new net.fortuna.ical4j.model.DateTime(eventper.getEnd()));
                        } else {
                            end = new DtEnd(new net.fortuna.ical4j.model.Date(eventper.getEnd()));
                        }
                        newprops.add(end);
                    }
                    for (Iterator<Property> iter2 = props.iterator(); iter2.hasNext();) {
                        Property prop = iter2.next();

                        // only add non-date-related properties
                        if (!(prop instanceof DtStart) && !(prop instanceof DtEnd)
                                && !(prop instanceof Duration) && !(prop instanceof RRule)
                                && !(prop instanceof RDate) && !(prop instanceof ExRule)
                                && !(prop instanceof ExDate)) {
                            newprops.add(prop);
                        }
                    }

                    // create the new event from our property list
                    VEvent newevent = new VEvent(newprops);
                    events.add(newevent);
                    log.trace("added event " + newevent);
                }
            }
        } catch (Exception e) {
            final String msg = "Failed to process the following ical4j component:  " + component;
            log.warn(msg, e);
        }
    }

    return events;
}

From source file:org.jevis.commons.dataprocessing.function.ImpulsFunction.java

License:Open Source License

@Override
public List<JEVisSample> getResult(Process mainTask) {
    List<JEVisSample> result = new ArrayList<>();

    if (mainTask.getSubProcesses().size() > 1) {
        System.out.println("Impuscleaner cannot work with more than one imput, using first only.");
    } else if (mainTask.getSubProcesses().size() < 1) {
        System.out.println("Impuscleaner, no input nothing to do");
    }// w  w w.j a  v a2s. c o m

    List<JEVisSample> samples = mainTask.getSubProcesses().get(0).getResult();

    DateTime firstTS = DateTime.now();
    DateTime lastTS = DateTime.now();
    try {
        firstTS = samples.get(0).getTimestamp();
        lastTS = samples.get(samples.size()).getTimestamp();
    } catch (JEVisException ex) {
        Logger.getLogger(ImpulsFunction.class.getName()).log(Level.SEVERE, null, ex);
    }

    List<Interval> intervals = ProcessOptions.getIntervals(mainTask, firstTS, lastTS);

    int lastPos = 0;
    for (Interval interval : intervals) {
        List<JEVisSample> samplesInPeriod = new ArrayList<>();

        for (int i = lastPos; i < samples.size(); i++) {
            try {
                if (interval.contains(samples.get(i).getTimestamp())) {
                    //                        System.out.println("add sample: " + samples.get(i));
                    samplesInPeriod.add(samples.get(i));
                } else if (samples.get(i).getTimestamp().isAfter(interval.getEnd())) {
                    lastPos = i;
                    break;
                }
            } catch (JEVisException ex) {
                System.out.println("JEVisExeption while going trou sample: " + ex.getMessage());
            }
        }

        //TODO: thi sis an dummy for
        JEVisSample bestmatch = null;
        for (JEVisSample sample : samplesInPeriod) {

            long bestDiff = 99999999999999999l;
            try {
                long middelMili = ((interval.getEndMillis() - interval.getStartMillis()) / 2)
                        + interval.getStartMillis();
                long diff = Math.abs(sample.getTimestamp().getMillis() - middelMili);
                //                    System.out.println("Diff for: " + sample.getTimestamp() + "      -> " + diff);

                if (bestmatch != null) {
                    if (bestDiff < diff) {
                        bestDiff = diff;
                        bestmatch = sample;
                    }
                } else {
                    bestmatch = sample;
                    bestDiff = diff;
                }

            } catch (JEVisException ex) {
                System.out.println("JEVisExeption while going trou sample2: " + ex.getMessage());
            }
        }
        if (bestmatch != null) {
            System.out.println("Best match: " + bestmatch);
            result.add(bestmatch);
        }
    }

    return result;
}

From source file:org.jevis.commons.dataprocessing.function.ImpulsFunction.java

License:Open Source License

public List<JEVisSample> getResult(ProcessOptions options, List<List<JEVisSample>> allSamples) {
    List<JEVisSample> result = new ArrayList<>();
    for (List<JEVisSample> samples : allSamples) {

        try {//  w  ww  . ja  v a 2 s. c  o  m
            _durations = ProcessOptions.buildIntervals(Period.minutes(15), _offset,
                    samples.get(0).getTimestamp(), samples.get(samples.size() - 1).getTimestamp());
        } catch (JEVisException ex) {
            Logger.getLogger(ImpulsFunction.class.getName()).log(Level.SEVERE, null, ex);
        }

        //Samples list is sorted by default
        int lastPos = 0;
        for (Interval interval : _durations) {
            //            System.out.println("Interval: " + interval);
            List<JEVisSample> samplesInPeriod = new ArrayList<>();

            for (int i = lastPos; i < samples.size(); i++) {
                try {
                    if (interval.contains(samples.get(i).getTimestamp())) {
                        //                        System.out.println("add sample: " + samples.get(i));
                        samplesInPeriod.add(samples.get(i));
                    } else if (samples.get(i).getTimestamp().isAfter(interval.getEnd())) {
                        lastPos = i;
                        break;
                    }
                } catch (JEVisException ex) {
                    System.out.println("JEVisExeption while going trou sample: " + ex.getMessage());
                }
            }

            //TODO: thi sis an dummy for
            JEVisSample bestmatch = null;
            for (JEVisSample sample : samplesInPeriod) {

                long bestDiff = 99999999999999999l;
                try {
                    long middelMili = ((interval.getEndMillis() - interval.getStartMillis()) / 2)
                            + interval.getStartMillis();
                    long diff = Math.abs(sample.getTimestamp().getMillis() - middelMili);
                    //                    System.out.println("Diff for: " + sample.getTimestamp() + "      -> " + diff);

                    if (bestmatch != null) {
                        if (bestDiff < diff) {
                            bestDiff = diff;
                            bestmatch = sample;
                        }
                    } else {
                        bestmatch = sample;
                        bestDiff = diff;
                    }

                } catch (JEVisException ex) {
                    System.out.println("JEVisExeption while going trou sample2: " + ex.getMessage());
                }
            }
            if (bestmatch != null) {
                System.out.println("Best match: " + bestmatch);
                result.add(bestmatch);
            }

        }

    }
    return result;
}

From source file:org.jevis.commons.dataprocessing.processor.ImpulsProcessor.java

License:Open Source License

@Override
public List<JEVisSample> getResult(Task mainTask) {
    List<JEVisSample> result = new ArrayList<>();

    if (mainTask.getSubTasks().size() > 1) {
        System.out.println("Impuscleaner cannot work with more than one imput, using first only.");
    } else if (mainTask.getSubTasks().size() < 1) {
        System.out.println("Impuscleaner, no input nothing to do");
    }/*w w  w. j a  v  a2s . c  o m*/

    List<JEVisSample> samples = mainTask.getSubTasks().get(0).getResult();

    DateTime firstTS = DateTime.now();
    DateTime lastTS = DateTime.now();
    try {
        firstTS = samples.get(0).getTimestamp();
        lastTS = samples.get(samples.size()).getTimestamp();
    } catch (JEVisException ex) {
        Logger.getLogger(ImpulsProcessor.class.getName()).log(Level.SEVERE, null, ex);
    }

    List<Interval> intervals = Options.getIntervals(mainTask, firstTS, lastTS);

    int lastPos = 0;
    for (Interval interval : intervals) {
        List<JEVisSample> samplesInPeriod = new ArrayList<>();

        for (int i = lastPos; i < samples.size(); i++) {
            try {
                if (interval.contains(samples.get(i).getTimestamp())) {
                    //                        System.out.println("add sample: " + samples.get(i));
                    samplesInPeriod.add(samples.get(i));
                } else if (samples.get(i).getTimestamp().isAfter(interval.getEnd())) {
                    lastPos = i;
                    break;
                }
            } catch (JEVisException ex) {
                System.out.println("JEVisExeption while going trou sample: " + ex.getMessage());
            }
        }

        //TODO: thi sis an dummy for 
        JEVisSample bestmatch = null;
        for (JEVisSample sample : samplesInPeriod) {

            long bestDiff = 99999999999999999l;
            try {
                long middelMili = ((interval.getEndMillis() - interval.getStartMillis()) / 2)
                        + interval.getStartMillis();
                long diff = Math.abs(sample.getTimestamp().getMillis() - middelMili);
                //                    System.out.println("Diff for: " + sample.getTimestamp() + "      -> " + diff);

                if (bestmatch != null) {
                    if (bestDiff < diff) {
                        bestDiff = diff;
                        bestmatch = sample;
                    }
                } else {
                    bestmatch = sample;
                    bestDiff = diff;
                }

            } catch (JEVisException ex) {
                System.out.println("JEVisExeption while going trou sample2: " + ex.getMessage());
            }
        }
        if (bestmatch != null) {
            System.out.println("Best match: " + bestmatch);
            result.add(bestmatch);
        }
    }

    return result;
}

From source file:org.jevis.commons.dataprocessing.processor.ImpulsProcessor.java

License:Open Source License

public List<JEVisSample> getResult(Options options, List<List<JEVisSample>> allSamples) {
    List<JEVisSample> result = new ArrayList<>();
    for (List<JEVisSample> samples : allSamples) {

        try {/*w w w . j  a  v a2  s  .  c o m*/
            _durations = Options.buildIntervals(Period.minutes(15), _offset, samples.get(0).getTimestamp(),
                    samples.get(samples.size() - 1).getTimestamp());
        } catch (JEVisException ex) {
            Logger.getLogger(ImpulsProcessor.class.getName()).log(Level.SEVERE, null, ex);
        }

        //Samples list is sorted by default
        int lastPos = 0;
        for (Interval interval : _durations) {
            //            System.out.println("Interval: " + interval);
            List<JEVisSample> samplesInPeriod = new ArrayList<>();

            for (int i = lastPos; i < samples.size(); i++) {
                try {
                    if (interval.contains(samples.get(i).getTimestamp())) {
                        //                        System.out.println("add sample: " + samples.get(i));
                        samplesInPeriod.add(samples.get(i));
                    } else if (samples.get(i).getTimestamp().isAfter(interval.getEnd())) {
                        lastPos = i;
                        break;
                    }
                } catch (JEVisException ex) {
                    System.out.println("JEVisExeption while going trou sample: " + ex.getMessage());
                }
            }

            //TODO: thi sis an dummy for 
            JEVisSample bestmatch = null;
            for (JEVisSample sample : samplesInPeriod) {

                long bestDiff = 99999999999999999l;
                try {
                    long middelMili = ((interval.getEndMillis() - interval.getStartMillis()) / 2)
                            + interval.getStartMillis();
                    long diff = Math.abs(sample.getTimestamp().getMillis() - middelMili);
                    //                    System.out.println("Diff for: " + sample.getTimestamp() + "      -> " + diff);

                    if (bestmatch != null) {
                        if (bestDiff < diff) {
                            bestDiff = diff;
                            bestmatch = sample;
                        }
                    } else {
                        bestmatch = sample;
                        bestDiff = diff;
                    }

                } catch (JEVisException ex) {
                    System.out.println("JEVisExeption while going trou sample2: " + ex.getMessage());
                }
            }
            if (bestmatch != null) {
                System.out.println("Best match: " + bestmatch);
                result.add(bestmatch);
            }

        }

    }
    return result;
}

From source file:org.kalypso.ogc.sensor.filter.filters.interval.IntervalIndex.java

License:Open Source License

public void insert(final IntervalData sourceData) {
    final Interval interval = sourceData.getInterval();
    m_sourceTree.insert(interval.getStartMillis(), interval.getEndMillis(), sourceData);
    m_itemCount++;/*from   www  . j  a  v a  2 s.  c o  m*/
}

From source file:org.kalypso.ogc.sensor.filter.filters.interval.IntervalIndex.java

License:Open Source License

public IntervalData[] query(final Interval targetInterval) {
    // BUGFIX: SortedPackedIntervalRTree runs into endless loop if queried when empty
    if (m_itemCount == 0)
        return new IntervalData[0];

    final ItemCollector visitor = new ItemCollector();
    m_sourceTree.query(targetInterval.getStartMillis(), targetInterval.getEndMillis(), visitor);
    return visitor.getItems();
}