@Override
    public Anomaly.AnomalyLevel checkPoint(Point point) {

        if (globalOverview.isEmpty()) {
            lastTimeStamp = point.getTime();
        }

        long currentTimeStamp = point.getTime();
        while (currentTimeStamp - lastTimeStamp > globalOverviewInterval) {
            globalOverview.remove();

            Point last = globalOverview.peek();

            if (last == null) {
                // queue is empty
                lastTimeStamp = point.getTime();
                break;
            }

            lastTimeStamp = last.getTime();
        }

        globalOverview.add(point);

        Iterator<Point> iterator = globalOverview.iterator();

        Map<Point, Double> weightedSet = new HashMap<Point, Double>();
        while (iterator.hasNext()) {
            Point currentPoint = iterator.next();
            double calculatedWeight =  calculateWeight(globalOverviewInterval, currentPoint.getTime(), point.getTime());
            weightedSet.put(currentPoint, calculatedWeight);
        }
        double extremalMeasure = extendedFuzzyComparison.compare(weightedSet, point.getValue());

        measureCurve.addPoint(new Point(point.getTime(), extremalMeasure));

        if (extremalMeasure > verticalExtremalLevel) {
            if (anomalyStarted) {
                Anomaly lastOne = resultList.get(resultList.size() - 1);
                lastOne.setEnd(point.getTime());
            } else {
                resultList.add(new Anomaly(point.getTime(), point.getTime(), Anomaly.AnomalyLevel.ANOMALY));
                anomalyStarted = true;
            }
            return Anomaly.AnomalyLevel.ANOMALY;
        }

        anomalyStarted = false;
        // todo: look if it is potential Anomaly

        return Anomaly.AnomalyLevel.NONE;
    }