// Path: app/src/main/java/io/github/marktony/espresso/data/Package.java
// public class Package extends RealmObject {
// 
//     public static final int STATUS_FAILED = 2, STATUS_NORMAL = 0,
//                             STATUS_ON_THE_WAY = 5, STATUS_DELIVERED = 3,
//                             STATUS_RETURNED = 4, STATUS_RETURNING = 6,
//                             STATUS_OTHER = 1;
// 
//     @Expose
//     @SerializedName("message")
//     private String message;
//     @Expose
//     @SerializedName("nu")
//     @PrimaryKey
//     private String number;
//     @Expose
//     @SerializedName("ischeck")
//     private String isCheck;
//     @Expose
//     @SerializedName("condition")
//     private String condition;
//     @Expose
//     @SerializedName("com")
//     private String company;
//     @Expose
//     @SerializedName("status")
//     private String status;
//     @Expose
//     @SerializedName("state")
//     private String state;
//     @Expose
//     @SerializedName("data")
//     private RealmList<PackageStatus> data;
// 
//     @Expose
//     private boolean pushable = false;
//     @Expose
//     private boolean readable = false;
//     @Expose
//     private String name;
//     @Expose
//     private String companyChineseName;
//     @Expose
//     private int colorAvatar;
//     @Expose
//     private long timestamp;
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public String getNumber() {
//         return number;
//     }
// 
//     public void setNumber(String number) {
//         this.number = number;
//     }
// 
//     public String getIsCheck() {
//         return isCheck;
//     }
// 
//     public void setIsCheck(String isCheck) {
//         this.isCheck = isCheck;
//     }
// 
//     public String getCondition() {
//         return condition;
//     }
// 
//     public void setCondition(String condition) {
//         this.condition = condition;
//     }
// 
//     public String getStatus() {
//         return status;
//     }
// 
//     public void setStatus(String status) {
//         this.status = status;
//     }
// 
//     public String getState() {
//         return state;
//     }
// 
//     public void setState(String state) {
//         this.state = state;
//     }
// 
//     public RealmList<PackageStatus> getData() {
//         return data;
//     }
// 
//     public void setData(RealmList<PackageStatus> data) {
//         this.data = data;
//     }
// 
//     public boolean isReadable() {
//         return readable;
//     }
// 
//     public void setReadable(boolean readable) {
//         this.readable = readable;
//     }
// 
//     public String getCompany() {
//         return company;
//     }
// 
//     public void setCompany(String company) {
//         this.company = company;
//     }
// 
//     public boolean isPushable() {
//         return pushable;
//     }
// 
//     public void setPushable(boolean pushable) {
//         this.pushable = pushable;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getCompanyChineseName() {
//         return companyChineseName;
//     }
// 
//     public void setCompanyChineseName(String companyChineseName) {
//         this.companyChineseName = companyChineseName;
//     }
// 
//     public void setColorAvatar(int colorAvatar) {
//         this.colorAvatar = colorAvatar;
//     }
// 
//     public int getColorAvatar() {
//         return colorAvatar;
//     }
// 
//     public void setTimestamp(long timestamp) {
//         this.timestamp = timestamp;
//     }
// 
//     public long getTimestamp() {
//         return timestamp;
//     }
// 
//     @Override
//     public String toString() {
//         return new Gson().toJson(this);
//     }
// }


import android.support.annotation.NonNull;
import java.util.List;
import io.github.marktony.espresso.data.Package;
import io.reactivex.Observable;
/*
 *  Copyright(c) 2017 lizhaotailang
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.github.marktony.espresso.data.source;




/**
 * Created by lizhaotailang on 2017/2/25.
 * Main entry point for accessing packages data.
 * <p>
 */

public interface PackagesDataSource {

    Observable<List<Package>> getPackages();

    Observable<Package> getPackage(@NonNull final String packNumber);

    void savePackage(@NonNull Package pack);

    void deletePackage(@NonNull String packageId);

    Observable<List<Package>> refreshPackages();

    Observable<Package> refreshPackage(@NonNull String packageId);

    void setAllPackagesRead();

    void setPackageReadable(@NonNull String packageId, boolean readable);

    boolean isPackageExist(@NonNull String packageId);

    void updatePackageName(@NonNull String packageId, @NonNull String name);

// Path: app/src/main/java/io/github/marktony/espresso/data/Package.java
// public class Package extends RealmObject {
// 
//     public static final int STATUS_FAILED = 2, STATUS_NORMAL = 0,
//                             STATUS_ON_THE_WAY = 5, STATUS_DELIVERED = 3,
//                             STATUS_RETURNED = 4, STATUS_RETURNING = 6,
//                             STATUS_OTHER = 1;
// 
//     @Expose
//     @SerializedName("message")
//     private String message;
//     @Expose
//     @SerializedName("nu")
//     @PrimaryKey
//     private String number;
//     @Expose
//     @SerializedName("ischeck")
//     private String isCheck;
//     @Expose
//     @SerializedName("condition")
//     private String condition;
//     @Expose
//     @SerializedName("com")
//     private String company;
//     @Expose
//     @SerializedName("status")
//     private String status;
//     @Expose
//     @SerializedName("state")
//     private String state;
//     @Expose
//     @SerializedName("data")
//     private RealmList<PackageStatus> data;
// 
//     @Expose
//     private boolean pushable = false;
//     @Expose
//     private boolean readable = false;
//     @Expose
//     private String name;
//     @Expose
//     private String companyChineseName;
//     @Expose
//     private int colorAvatar;
//     @Expose
//     private long timestamp;
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public String getNumber() {
//         return number;
//     }
// 
//     public void setNumber(String number) {
//         this.number = number;
//     }
// 
//     public String getIsCheck() {
//         return isCheck;
//     }
// 
//     public void setIsCheck(String isCheck) {
//         this.isCheck = isCheck;
//     }
// 
//     public String getCondition() {
//         return condition;
//     }
// 
//     public void setCondition(String condition) {
//         this.condition = condition;
//     }
// 
//     public String getStatus() {
//         return status;
//     }
// 
//     public void setStatus(String status) {
//         this.status = status;
//     }
// 
//     public String getState() {
//         return state;
//     }
// 
//     public void setState(String state) {
//         this.state = state;
//     }
// 
//     public RealmList<PackageStatus> getData() {
//         return data;
//     }
// 
//     public void setData(RealmList<PackageStatus> data) {
//         this.data = data;
//     }
// 
//     public boolean isReadable() {
//         return readable;
//     }
// 
//     public void setReadable(boolean readable) {
//         this.readable = readable;
//     }
// 
//     public String getCompany() {
//         return company;
//     }
// 
//     public void setCompany(String company) {
//         this.company = company;
//     }
// 
//     public boolean isPushable() {
//         return pushable;
//     }
// 
//     public void setPushable(boolean pushable) {
//         this.pushable = pushable;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getCompanyChineseName() {
//         return companyChineseName;
//     }
// 
//     public void setCompanyChineseName(String companyChineseName) {
//         this.companyChineseName = companyChineseName;
//     }
// 
//     public void setColorAvatar(int colorAvatar) {
//         this.colorAvatar = colorAvatar;
//     }
// 
//     public int getColorAvatar() {
//         return colorAvatar;
//     }
// 
//     public void setTimestamp(long timestamp) {
//         this.timestamp = timestamp;
//     }
// 
//     public long getTimestamp() {
//         return timestamp;
//     }
// 
//     @Override
//     public String toString() {
//         return new Gson().toJson(this);
//     }
// }


// Path: app/src/main/java/io/github/marktony/espresso/data/source/PackagesDataSource.java
import android.support.annotation.NonNull;
import java.util.List;
import io.github.marktony.espresso.data.Package;
import io.reactivex.Observable;

/*
 *  Copyright(c) 2017 lizhaotailang
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.github.marktony.espresso.data.source;




/**
 * Created by lizhaotailang on 2017/2/25.
 * Main entry point for accessing packages data.
 * <p>
 */

public interface PackagesDataSource {

    Observable<List<Package>> getPackages();

    Observable<Package> getPackage(@NonNull final String packNumber);

    void savePackage(@NonNull Package pack);

    void deletePackage(@NonNull String packageId);

    Observable<List<Package>> refreshPackages();

    Observable<Package> refreshPackage(@NonNull String packageId);

    void setAllPackagesRead();

    void setPackageReadable(@NonNull String packageId, boolean readable);

    boolean isPackageExist(@NonNull String packageId);

    void updatePackageName(@NonNull String packageId, @NonNull String name);

    Observable<List<Package>> searchPackages(@NonNull String keyWords);