com.barchart.feed.ddf.resolver.provider.Status.java Source code

Java tutorial

Introduction

Here is the source code for com.barchart.feed.ddf.resolver.provider.Status.java

Source

/**
 * Copyright (C) 2011-2012 Barchart, Inc. <http://www.barchart.com/>
 *
 * All rights reserved. Licensed under the OSI BSD License.
 *
 * http://www.opensource.org/licenses/bsd-license.php
 */
package com.barchart.feed.ddf.resolver.provider;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.Term;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.Days;

/** resolver status document; singleton */
class Status {

    static final String FIELD_ID = "@STATUS_ID";
    static final String STATUS_VALUE = "a650560d-3724-4200-a6ff-c5911289e485";

    static final String PROP_RUN_TIME = "RUN_TIME";
    static final String PROP_SUCCESS = "SUCCESS";

    static final Term TERM = new Term(FIELD_ID, STATUS_VALUE);

    static final Status EMPTY = new Status(0, false);

    /** millis UTC */
    final long lastRunTime;

    /** last run status */
    final boolean wasRunSuccess;

    Status(long lastRunTime, boolean isSuccess) {

        this.lastRunTime = lastRunTime;
        this.wasRunSuccess = isSuccess;

    }

    static Status decode(final Document doc) {

        String timeText = doc.get(PROP_RUN_TIME);

        long lastRunTime = Long.parseLong(timeText);

        //

        String successText = doc.get(PROP_SUCCESS);

        boolean isSuccess = Boolean.parseBoolean(successText);

        //

        Status status = new Status(lastRunTime, isSuccess);

        return status;

    }

    static Document encode(final Status status) {

        final Document doc = new Document();

        {
            String name = TERM.field();
            String value = TERM.text();
            doc.add(new Field(name, value, Field.Store.YES, Field.Index.NOT_ANALYZED));
        }

        {
            String name = PROP_RUN_TIME;
            String value = Long.toString(status.lastRunTime).toString();
            doc.add(new Field(name, value, Field.Store.YES, Field.Index.NO));
        }

        {
            String name = PROP_SUCCESS;
            String value = Boolean.toString(status.wasRunSuccess);
            doc.add(new Field(name, value, Field.Store.YES, Field.Index.NO));
        }

        return doc;

    }

    boolean isPending() {

        if (!wasRunSuccess) {
            return true;
        }

        final DateTime previous = new DateTime(lastRunTime);

        final DateTime current = new DateTime(DateTimeZone.UTC);

        final Days days = Days.daysBetween(previous, current);

        final int count = days.getDays();

        if (count > 1) {
            return true;
        }

        return false;

    }

}