Java tutorial
/** * 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; } }