Skip to content

BookDetailActivityBundler

Madhu kiran edited this page Jan 15, 2016 · 1 revision
public class BookDetailActivityBundler {
  public static Bundle saveState(BookDetailActivity bookDetailActivity, Bundle bundle) {
    if(bundle == null) {
      bundle = new Bundle();
    }
    bundle.putLong("id", bookDetailActivity.id);
    if(bookDetailActivity.book != null) {
      bundle.putString("book", bookDetailActivity.book);
    }
    if(bookDetailActivity.author != null) {
      bundle.putString("author", bookDetailActivity.author);
    }
    return bundle;
  }

  public static void restoreState(BookDetailActivity bookDetailActivity, Bundle bundle) {
    if(bundle == null) {
      return;
    }
    bookDetailActivity.id = bundle.getLong("id", bookDetailActivity.id);
    if(bundle.containsKey("book")) {
      bookDetailActivity.book = bundle.getString("book");
    }
    if(bundle.containsKey("author")) {
      bookDetailActivity.author = bundle.getString("author");
    }
  }

  public static Builder build() {
    return new Builder();
  }

  public static Parser parse(Bundle bundle) {
    return new Parser(bundle);
  }

  public static Parser parse(Intent intent) {
    if(intent == null) {
      return new Parser(null);
    }
    return parse(intent.getExtras());
  }

  public static class Builder {
    private Long id;

    private String book;

    private String author;

    private Builder() {
    }

    public Builder id(long id) {
      this.id = id;
      return this;
    }

    public Builder book(String book) {
      this.book = book;
      return this;
    }

    public Builder author(String author) {
      this.author = author;
      return this;
    }

    public Bundle bundle() {
      Bundle bundle = new Bundle();
      if(id != null) {
        bundle.putLong(Keys.ID, id);
      }
      if(book != null) {
        bundle.putString(Keys.BOOK, book);
      }
      if(author != null) {
        bundle.putString(Keys.AUTHOR, author);
      }
      return bundle;
    }

    public Intent intent(Context context) {
      Intent intent = new Intent(context, BookDetailActivity.class);
      intent.putExtras(bundle());
      return intent;
    }

    public void start(Context context) {
      context.startActivity(intent(context));
    }
  }

  public static class Parser {
    private Bundle bundle;

    private Parser(Bundle bundle) {
      this.bundle = bundle;
    }

    public boolean isNull() {
      return bundle == null;
    }

    public boolean hasId() {
      return !isNull() && bundle.containsKey(Keys.ID);
    }

    public long id(long defaultVal) {
      if(isNull()) {
        return defaultVal;
      }
      return bundle.getLong(Keys.ID, defaultVal);
    }

    public boolean hasBook() {
      return !isNull() && bundle.containsKey(Keys.BOOK);
    }

    public String book() {
      if(isNull()) {
        return null;
      }
      return bundle.getString(Keys.BOOK);
    }

    public boolean hasAuthor() {
      return !isNull() && bundle.containsKey(Keys.AUTHOR);
    }

    public String author() {
      if(isNull()) {
        return null;
      }
      return bundle.getString(Keys.AUTHOR);
    }

    public void into(BookDetailActivity bookDetailActivity) {
      if(hasId()) {
        bookDetailActivity.id = id(bookDetailActivity.id);
      }
      if(hasBook()) {
        bookDetailActivity.book = book();
      }
      if(hasAuthor()) {
        bookDetailActivity.author = author();
      }
    }
  }

  public interface Keys {
    String ID = "id";

    String BOOK = "book";

    String AUTHOR = "author";
  }
}
Clone this wiki locally