package com.fastaccess.data.dao;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;
import com.fastaccess.data.dao.model.Issue;
import com.fastaccess.data.dao.model.PullRequest;
import com.fastaccess.data.dao.types.IssueState;
import java.util.List;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* Created by Kosh on 10 Dec 2016, 8:53 AM
*/
@Getter @Setter @NoArgsConstructor
public class IssueRequestModel implements Parcelable {
private IssueState state;
private String title;
private String body;
private Integer milestone;
private String assignee;
private List<String> labels;
private String base;
public static IssueRequestModel clone(@NonNull Issue issue, boolean toClose) {
IssueRequestModel model = new IssueRequestModel();
if (issue.getLabels() != null) {
model.setLabels(Stream.of(issue.getLabels()).filter(value -> value.getName() != null)
.map(LabelModel::getName).collect(Collectors.toList()));
}
model.setAssignee(issue.getAssignee() != null ? issue.getAssignee().getLogin() : null);
model.setBody(issue.getBody());
model.setMilestone(issue.getMilestone() != null ? issue.getMilestone().getNumber() : null);
model.setState(toClose ? issue.getState() == IssueState.closed ? IssueState.open : IssueState.closed : issue.getState());
model.setTitle(issue.getTitle());
return model;
}
public static IssueRequestModel clone(@NonNull PullRequest issue, boolean toClose) {
IssueRequestModel model = new IssueRequestModel();
if (issue.getLabels() != null) {
model.setLabels(Stream.of(issue.getLabels()).filter(value -> value.getName() != null)
.map(LabelModel::getName).collect(Collectors.toList()));
}
model.setBase(issue.getBase() != null ? issue.getBase().getRef() : "master");
model.setAssignee(issue.getAssignee() != null ? issue.getAssignee().getLogin() : null);
model.setBody(issue.getBody());
model.setMilestone(issue.getMilestone() != null ? issue.getMilestone().getNumber() : null);
model.setState(toClose ? issue.getState() == IssueState.closed ? IssueState.open : IssueState.closed : issue.getState());
model.setTitle(issue.getTitle());
return model;
}
@Override public int describeContents() { return 0; }
@Override public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.state == null ? -1 : this.state.ordinal());
dest.writeString(this.title);
dest.writeString(this.body);
dest.writeValue(this.milestone);
dest.writeString(this.assignee);
dest.writeStringList(this.labels);
}
protected IssueRequestModel(Parcel in) {
int tmpState = in.readInt();
this.state = tmpState == -1 ? null : IssueState.values()[tmpState];
this.title = in.readString();
this.body = in.readString();
this.milestone = (Integer) in.readValue(Integer.class.getClassLoader());
this.assignee = in.readString();
this.labels = in.createStringArrayList();
}
public static final Creator<IssueRequestModel> CREATOR = new Creator<IssueRequestModel>() {
@Override public IssueRequestModel createFromParcel(Parcel source) {return new IssueRequestModel(source);}
@Override public IssueRequestModel[] newArray(int size) {return new IssueRequestModel[size];}
};
}