package org.dodgybits.shuffle.web.server.model;
import static org.dodgybits.shuffle.web.server.persistence.JdoUtils.toKey;
import static org.dodgybits.shuffle.web.server.persistence.JdoUtils.toKeys;
import static org.dodgybits.shuffle.web.server.persistence.JdoUtils.toKeyValue;
import static org.dodgybits.shuffle.web.server.persistence.JdoUtils.toKeyValues;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import org.dodgybits.shuffle.web.client.model.ContextValue;
import org.dodgybits.shuffle.web.client.model.KeyValue;
import org.dodgybits.shuffle.web.client.model.ProjectValue;
import org.dodgybits.shuffle.web.client.model.TaskValue;
import org.dodgybits.shuffle.web.client.model.TaskValue.Builder;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Text;
import com.google.appengine.api.users.User;
@SuppressWarnings("serial")
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Task implements Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key mKey;
@Persistent
private User user;
@Persistent
private String mTitle;
@Persistent
private Text mDetails;
@Persistent
private Key mProjectKey;
@Persistent
private List<Key> mContextKeys;
@Persistent
private Date mDueDate;
public final Key getKey() {
return mKey;
}
public final User getUser() {
return user;
}
public final String getTitle() {
return mTitle;
}
public final Text getDetails() {
return mDetails;
}
public final Key getProjectId() {
return mProjectKey;
}
public final List<Key> getContextIds() {
return mContextKeys;
}
public final Date getDueDate() {
return mDueDate;
}
public final TaskValue toTaskValue() {
KeyValue<TaskValue> keyValue = toKeyValue(mKey);
KeyValue<ProjectValue> projectKey = toKeyValue(mProjectKey);
ArrayList<KeyValue<ContextValue>> contextKeys = toKeyValues(mContextKeys);
Builder builder = new Builder();
builder.setId(keyValue)
.setTitle(mTitle)
.setDetails(mDetails == null ? null : mDetails.getValue())
.setProjectId(projectKey)
.setContextIds(contextKeys)
.setDueDate(mDueDate);
return builder.build();
}
public static final Task fromTaskValue(User user, TaskValue value) {
Task task = new Task();
task.mKey = toKey(value.getId());
task.user = user;
task.mTitle = value.getTitle();
task.mDetails = new Text(value.getDetails());
task.mProjectKey = toKey(value.getProjectId());
task.mContextKeys = toKeys(value.getContextIds());
task.mDueDate = value.getDueDate();
return task;
}
}