001 package market.statistics;
002
003 import java.util.Calendar;
004
005 import market.Conversions;
006 import market.SMarket;
007
008 public class PriceHistoryEntry extends HistoryEntry {
009
010 /**
011 * ID for serialization.
012 */
013 private static final long serialVersionUID = -1757057771582369394L;
014
015 private boolean changeInMorning;
016
017 public PriceHistoryEntry(Calendar date, int value) {
018 super(date, value);
019 this.changeInMorning = !SMarket.isOpen() && SMarket.hasTimeAdvanced();
020 }
021
022
023 /**
024 * Returns if an Entry is privsional or not. An entry is provisional (and can therefore be replaced) if
025 * <ul>
026 * <li>it has been created in the morning before the market opened. The market hasn't opened and
027 * the date hasn't advanced since then, that means, it is still the same morning since the
028 * last price change.</li>
029 * <li>it has been created in the evening after the market closed, and this evening has not yet
030 * passed by, that means, it is still the same evening since the last price change.</li>
031 * <li>it has been created in the evening after the market closed, but now is the following morning and
032 * the market hasn't opened yet.</li>
033 * </ul>
034 *
035 * @return if an Entry is provisional or not.
036 */
037 public boolean isProvisional() {
038 return (((Conversions.dayDifference(date, SMarket.getTime()) == 0) &&
039 changeInMorning && SMarket.hasTimeAdvanced()) //created this morning, still morning
040 ||
041 ((Conversions.dayDifference(SMarket.getTime(), date) == 1) &&
042 !changeInMorning && !SMarket.hasTimeAdvanced()) //created this evening, still evening
043 ||
044 (Conversions.dayDifference(date, SMarket.getTime()) == 0 && //created yesterday, market not open
045 !SMarket.isOpen() && SMarket.hasTimeAdvanced()));
046 }
047 }
048
049