DateInterval.java :  » Log » mhfinance » com » forsir » android » mhfinance » helper » Android Open Source

Android Open Source » Log » mhfinance 
mhfinance » com » forsir » android » mhfinance » helper » DateInterval.java
package com.forsir.android.mhfinance.helper;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;

import com.forsir.android.mhfinance.R;

public class DateInterval {
  public final static String DATE_FROM = "date_from";
  public final static String DATE_TO = "date_to";
  public final static String DATE_TYPE = "date_type";

  public final static int TYPE_CUSTOM = 0;
  public final static int TYPE_WEEK = 1;
  public final static int TYPE_MONTH = 2;
  public final static int TYPE_YEAR = 3;

  private Calendar mDateFrom = Calendar.getInstance();
  private Calendar mDateTo = Calendar.getInstance();
  private int mType = TYPE_MONTH;

  public DateInterval() {
    mDateFrom.set(mDateFrom.get(Calendar.YEAR), mDateFrom.get(Calendar.MONTH), mDateFrom.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
    mDateTo.set(mDateTo.get(Calendar.YEAR), mDateTo.get(Calendar.MONTH), mDateTo.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
    mDateFrom.set(Calendar.MILLISECOND, 0);
    mDateTo.set(Calendar.MILLISECOND, 0);
  }

  public void setDateFrom(Calendar dateFrom) {
    mDateFrom = dateFrom;
    mDateFrom.set(Calendar.MILLISECOND, 0);
  }

  public Calendar getDateFrom() {
    return mDateFrom;
  }

  public void setType(int type) {
    mType = type;
  }

  public int getType() {
    return mType;
  }

  public void setDateTo(Calendar dateTo) {
    mDateTo = dateTo;
    mDateTo.set(Calendar.MILLISECOND, 0);
  }

  public Calendar getDateTo() {
    final Calendar dateTo = (Calendar) mDateFrom.clone();
    switch (mType) {
      case TYPE_CUSTOM:
        return mDateTo;
      case TYPE_WEEK:
        dateTo.add(Calendar.WEEK_OF_YEAR, 1);
        break;
      case TYPE_MONTH:
        dateTo.add(Calendar.MONTH, 1);
        break;
      case TYPE_YEAR:
        dateTo.add(Calendar.YEAR, 1);
        break;
      default:
        break;
    }

    return dateTo;
  }

  public void findFirstDate() {
    switch (mType) {
      case TYPE_CUSTOM:
        break;
      case TYPE_WEEK:
        mDateFrom.set(Calendar.DAY_OF_WEEK, 1);
        break;
      case TYPE_MONTH:
        mDateFrom.set(Calendar.DAY_OF_MONTH, 1);
        break;
      case TYPE_YEAR:
        mDateFrom.set(Calendar.MONTH, Calendar.JANUARY);
        mDateFrom.set(Calendar.DAY_OF_MONTH, 1);
        break;
    }
    mDateFrom.set(Calendar.HOUR_OF_DAY, 0);
    mDateFrom.set(Calendar.MINUTE, 0);
    mDateFrom.set(Calendar.SECOND, 0);
    mDateFrom.set(Calendar.MILLISECOND, 0);
  }

  public void moveToBoundaries(Calendar fromDate, Calendar toDate) {
    while (getDateTo().before(fromDate)) {
      moveToNext();
    }
    while (mDateFrom.after(toDate)) {
      moveToPrevious();
    }
  }

  public void moveToNext() {
    switch (mType) {
      case TYPE_CUSTOM:
        long sub = mDateTo.getTimeInMillis() - mDateFrom.getTimeInMillis();
        sub = sub / 86400000l; // (1000 * 60 * 60 * 24);
        final int day = (int) sub;
        mDateFrom.add(Calendar.DAY_OF_YEAR, day);
        mDateTo.add(Calendar.DAY_OF_YEAR, day);
        break;
      case TYPE_WEEK:
        mDateFrom.add(Calendar.WEEK_OF_YEAR, 1);
        break;
      case TYPE_MONTH:
        mDateFrom.add(Calendar.MONTH, 1);
        break;
      case TYPE_YEAR:
        mDateFrom.add(Calendar.YEAR, 1);
        break;
    }
  }

  public void moveToPrevious() {
    switch (mType) {
      case TYPE_CUSTOM:
        long sub = mDateTo.getTimeInMillis() - mDateFrom.getTimeInMillis();
        sub = sub / 86400000l; // (1000 * 60 * 60 * 24);
        final int day = -(int) sub;
        mDateFrom.add(Calendar.DAY_OF_YEAR, day);
        mDateTo.add(Calendar.DAY_OF_YEAR, day);
        break;
      case TYPE_WEEK:
        mDateFrom.add(Calendar.WEEK_OF_YEAR, -1);
        break;
      case TYPE_MONTH:
        mDateFrom.add(Calendar.MONTH, -1);
        break;
      case TYPE_YEAR:
        mDateFrom.add(Calendar.YEAR, -1);
        break;
    }
  }

  public CharSequence getDateString(Resources resource) {
    final SimpleDateFormat format = new SimpleDateFormat(resource.getString(R.string.format_date));

    switch (mType) {
      case TYPE_CUSTOM:
        return format.format(mDateFrom.getTime());

      case TYPE_WEEK:
        final Calendar dateTo = getDateTo();
        final String dateFromString = format.format(mDateFrom.getTime());
        final String dateToString = format.format(dateTo.getTime());

        // if (mDateFrom.get(Calendar.YEAR) == dateTo.get(Calendar.YEAR)) {
        // if (mDateFrom.get(Calendar.MONTH) == dateTo.get(Calendar.MONTH)) {
        // dateFromString = String.valueOf(mDateFrom.get(Calendar.DAY_OF_MONTH));
        // } else {
        // // year must be 4 chars
        // dateFromString = (String) dateFromString.subSequence(0, dateFromString.length() - 4);
        // }
        // }

        return dateFromString + " - " + dateToString;

      case TYPE_MONTH:
        return resource.getTextArray(R.array.months)[mDateFrom.get(Calendar.MONTH)] + " " + mDateFrom.get(Calendar.YEAR);

      case TYPE_YEAR:
        return String.valueOf(mDateFrom.get(Calendar.YEAR));
    }
    return "";
  }

  public CharSequence getDateToString(Resources resource) {
    if (mType != TYPE_CUSTOM) {
      return "";
    }

    final SimpleDateFormat format = new SimpleDateFormat(resource.getString(R.string.format_date));

    return format.format(mDateTo.getTime());
  }

  public DateInterval fillFromBundle(Bundle bundle) {
    if (bundle == null) {
      return this;
    }

    mDateFrom.setTimeInMillis(bundle.getLong(DATE_FROM));
    mDateFrom.set(Calendar.SECOND, 0);
    mDateFrom.set(Calendar.MILLISECOND, 0);
    mDateTo.setTimeInMillis(bundle.getLong(DATE_TO));
    mDateTo.set(Calendar.SECOND, 0);
    mDateTo.set(Calendar.MILLISECOND, 0);
    mType = bundle.getInt(DATE_TYPE);

    return this;
  }

  public Bundle fillBundle(Bundle bundle) {
    if (bundle == null) {
      return null;
    }

    bundle.putLong(DATE_FROM, mDateFrom.getTimeInMillis());
    bundle.putLong(DATE_TO, mDateTo.getTimeInMillis());
    bundle.putInt(DATE_TYPE, mType);

    return bundle;
  }

  public Intent fillIntent(Intent intent) {
    if (intent == null) {
      return null;
    }

    intent.putExtra(DATE_FROM, mDateFrom.getTimeInMillis());
    intent.putExtra(DATE_TO, mDateTo.getTimeInMillis());
    intent.putExtra(DATE_TYPE, mType);

    return intent;
  }

  public boolean isEmpty() {
    return mDateFrom.getTimeInMillis() == 0l;
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.