package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.data.dao.types.FilesType; import com.fastaccess.helper.RxHelper; import java.util.List; import io.requery.Entity; import io.requery.Generated; import io.requery.Key; import io.requery.Persistable; import io.requery.rx.SingleEntityStore; import lombok.NoArgsConstructor; import rx.Observable; import rx.Single; import static com.fastaccess.data.dao.model.RepoFile.LOGIN; import static com.fastaccess.data.dao.model.RepoFile.REPO_ID; import static com.fastaccess.data.dao.model.RepoFile.SHA; import static com.fastaccess.data.dao.model.RepoFile.TYPE; /** * Created by Kosh on 16 Mar 2017, 7:53 PM */ @Entity @NoArgsConstructor public abstract class AbstractRepoFile implements Parcelable { @Key @Generated long id; String name; String path; String sha; long size; String url; String htmlUrl; String gitUrl; String downloadUrl; FilesType type; String repoId; String login; public Single save(RepoFile entity) { return App.getInstance().getDataStore() .insert(entity); } public static Observable save(@NonNull List<RepoFile> models, @NonNull String login, @NonNull String repoId) { SingleEntityStore<Persistable> singleEntityStore = App.getInstance().getDataStore(); return RxHelper.safeObservable(singleEntityStore.delete(RepoFile.class) .where(REPO_ID.eq(repoId) .and(LOGIN.eq(login))) .get() .toSingle() .toObservable() .flatMap(integer -> Observable.from(models)) .flatMap(filesModel -> { filesModel.setRepoId(repoId); filesModel.setLogin(login); return filesModel.save(filesModel).toObservable(); })); } public static Observable<List<RepoFile>> getFiles(@NonNull String login, @NonNull String repoId) { return App.getInstance().getDataStore() .select(RepoFile.class) .where(REPO_ID.eq(repoId) .and(LOGIN.eq(login))) .orderBy(TYPE.asc()) .get() .toObservable() .toList(); } public static Observable<RepoFile> getFile(@NonNull String login, @NonNull String repoId, @NonNull String sha) { return App.getInstance().getDataStore() .select(RepoFile.class) .where(REPO_ID.eq(repoId) .and(LOGIN.eq(login)) .and(SHA.eq(sha))) .orderBy(TYPE.asc()) .get() .toObservable(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeLong(this.id); dest.writeString(this.name); dest.writeString(this.path); dest.writeString(this.sha); dest.writeLong(this.size); dest.writeString(this.url); dest.writeString(this.htmlUrl); dest.writeString(this.gitUrl); dest.writeString(this.downloadUrl); dest.writeInt(this.type == null ? -1 : this.type.ordinal()); dest.writeString(this.repoId); dest.writeString(this.login); } protected AbstractRepoFile(Parcel in) { this.id = in.readLong(); this.name = in.readString(); this.path = in.readString(); this.sha = in.readString(); this.size = in.readLong(); this.url = in.readString(); this.htmlUrl = in.readString(); this.gitUrl = in.readString(); this.downloadUrl = in.readString(); int tmpType = in.readInt(); this.type = tmpType == -1 ? null : FilesType.values()[tmpType]; this.repoId = in.readString(); this.login = in.readString(); } public static final Creator<RepoFile> CREATOR = new Creator<RepoFile>() { @Override public RepoFile createFromParcel(Parcel source) {return new RepoFile(source);} @Override public RepoFile[] newArray(int size) {return new RepoFile[size];} }; }