| // Copyright 2016 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package io.v.todos.model; |
| |
| import android.support.annotation.NonNull; |
| |
| import java.util.Date; |
| |
| /** |
| * Tracks information regarding a particular todo list. |
| */ |
| public class ListMetadata extends KeyedData<ListMetadata> { |
| public final String name; |
| public final long updatedAt; |
| |
| public final int numCompleted; |
| public final int numTasks; |
| |
| public ListMetadata(String key, String name, long updatedAt, int numCompleted, int numTasks) { |
| super(key); |
| this.name = name; |
| this.updatedAt = updatedAt; |
| this.numCompleted = numCompleted; |
| this.numTasks = numTasks; |
| } |
| |
| public ListMetadata(String key, ListSpec spec, int numCompleted, int numTasks) { |
| this(key, spec.getName(), spec.getUpdatedAt(), numCompleted, numTasks); |
| } |
| |
| public boolean isDone() { |
| return numTasks > 0 && numCompleted == numTasks; |
| } |
| |
| public boolean canCompleteAll() { |
| return numCompleted < numTasks; |
| } |
| |
| @Override |
| public boolean equals(Object o) { |
| return this == o || |
| o instanceof ListMetadata && |
| ((ListMetadata) o).canEqual(this) && |
| compareTo((ListMetadata)o) == 0; |
| } |
| |
| protected boolean canEqual(Object other) { |
| return other instanceof ListMetadata; |
| } |
| |
| @Override |
| public int hashCode() { |
| return key.hashCode(); |
| } |
| |
| @Override |
| public int compareTo(@NonNull ListMetadata other) { |
| if (this == other) { |
| return 0; |
| } else if (!other.canEqual(this)) { |
| throw new ClassCastException("Cannot compare " + getClass() + " to " + |
| other.getClass()); |
| } else { |
| return key.compareTo(other.key); |
| } |
| // TODO(rosswang): factor out ordering. |
| } |
| |
| public ListSpec toSpec() { |
| return new ListSpec(name, updatedAt); |
| } |
| |
| @Override |
| public String toString() { |
| return key + ": " + name + " (" + numCompleted + "/" + numTasks + "), last updated " + |
| new Date(updatedAt); |
| } |
| } |