// Path: rxuploader/src/main/java/com/jagsaund/rxuploader/job/Status.java
// public class Status {
//     @NonNull private final StatusType status;
//     @NonNull private final String id;
// 
//     @Nullable private final ErrorType error;
// 
//     @Expose(serialize = false,
//             deserialize = false) private final int progress;
// 
//     @Expose(serialize = false,
//             deserialize = false) @Nullable private final Object response;
// 
//     private Status(@NonNull String id, @NonNull StatusType status, int progress,
//             @Nullable ErrorType error, @Nullable Object response) {
//         this.id = id;
//         this.status = status;
//         this.progress = progress;
//         this.error = error;
//         this.response = response;
//     }
// 
//     @NonNull
//     public static Status createQueued(@NonNull String id) {
//         return new Status(id, StatusType.QUEUED, 0, null, null);
//     }
// 
//     @NonNull
//     public static Status createSending(@NonNull String id, int progress) {
//         return new Status(id, StatusType.SENDING, progress, null, null);
//     }
// 
//     @NonNull
//     public static Status createCompleted(@NonNull String id, @Nullable Object response) {
//         return new Status(id, StatusType.COMPLETED, 0, null, response);
//     }
// 
//     @NonNull
//     public static Status createFailed(@NonNull String id, @NonNull ErrorType error) {
//         return new Status(id, StatusType.FAILED, 0, error, null);
//     }
// 
//     @NonNull
//     public static Status createInvalid(@NonNull String id) {
//         return new Status(id, StatusType.INVALID, 0, null, null);
//     }
// 
//     @NonNull
//     public String id() {
//         return id;
//     }
// 
//     @NonNull
//     public StatusType statusType() {
//         return status;
//     }
// 
//     public int progress() {
//         return progress;
//     }
// 
//     @NonNull
//     public Status withProgress(int progress) {
//         return createSending(id, progress);
//     }
// 
//     @Nullable
//     public ErrorType error() {
//         return error;
//     }
// 
//     @Nullable
//     public Object response() {
//         return response;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         Status jobStatus = (Status) o;
// 
//         if (progress != jobStatus.progress) return false;
//         if (status != jobStatus.status) return false;
//         if (error != jobStatus.error) return false;
//         if (!id.equals(jobStatus.id)) return false;
//         return response != null ? response.equals(jobStatus.response) : jobStatus.response == null;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = status.hashCode();
//         result = 31 * result + (error != null ? error.hashCode() : 0);
//         result = 31 * result + id.hashCode();
//         result = 31 * result + progress;
//         result = 31 * result + (response != null ? response.hashCode() : 0);
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "JobStatus{"
//                 + "status="
//                 + status
//                 + ", id="
//                 + id
//                 + ", progress="
//                 + progress
//                 + ", error="
//                 + error
//                 + ", response="
//                 + response
//                 + '}';
//     }
// }
// 
// Path: rxuploader-sample/src/main/java/com/jagsaund/rxuploader/sample/model/wire/PhotoJSONModel.java
// @AutoValue
// public abstract class PhotoJSONModel {
//     @NonNull
//     public static TypeAdapter<PhotoJSONModel> typeAdapter(Gson gson) {
//         return new AutoValue_PhotoJSONModel.GsonTypeAdapter(gson);
//     }
// 
//     @SerializedName("id")
//     public abstract int id();
// 
//     @SerializedName("user_id")
//     public abstract Integer userId();
// 
//     @SerializedName("name")
//     public abstract String name();
// 
//     @Nullable
//     @SerializedName("description")
//     public abstract String description();
// 
//     @SerializedName("width")
//     public abstract int width();
// 
//     @SerializedName("height")
//     public abstract int height();
// 
//     @SerializedName("image_url")
//     public abstract String imageUrl();
// 
//     @SerializedName("images")
//     public abstract List<ImageJSONModel> images();
// 
//     @SerializedName("user")
//     public abstract UserJSONModel user();
// }
// 
// Path: rxuploader/src/main/java/com/jagsaund/rxuploader/utils/StringUtils.java
// public class StringUtils {
//     private StringUtils() {
//     }
// 
//     public static boolean isNullOrEmpty(@Nullable CharSequence s) {
//         return s == null || s.length() == 0;
//     }
// 
//     @NonNull
//     public static String getOrDefault(@Nullable String s, @NonNull String t) {
//         return s != null ? s : t;
//     }
// 
//     @NonNull
//     public static String getOrEmpty(@Nullable String s) {
//         return getOrDefault(s, "");
//     }
// }


import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.jagsaund.rxuploader.job.Status;
import com.jagsaund.rxuploader.sample.model.wire.PhotoJSONModel;
import com.jagsaund.rxuploader.utils.StringUtils;
package com.jagsaund.rxuploader.sample.model.data;


public class PhotoDataModel implements DataModel {
    @NonNull
    public static DataModel create(@NonNull PhotoJSONModel model) {
        return new PhotoDataModel(String.valueOf(model.id()), model.name(),
                model.description(), model.imageUrl());
    }

    @NonNull private final String id;
    @NonNull private final String name;
    @NonNull private final String description;
    @NonNull private final String url;
// Path: rxuploader/src/main/java/com/jagsaund/rxuploader/job/Status.java
// public class Status {
//     @NonNull private final StatusType status;
//     @NonNull private final String id;
// 
//     @Nullable private final ErrorType error;
// 
//     @Expose(serialize = false,
//             deserialize = false) private final int progress;
// 
//     @Expose(serialize = false,
//             deserialize = false) @Nullable private final Object response;
// 
//     private Status(@NonNull String id, @NonNull StatusType status, int progress,
//             @Nullable ErrorType error, @Nullable Object response) {
//         this.id = id;
//         this.status = status;
//         this.progress = progress;
//         this.error = error;
//         this.response = response;
//     }
// 
//     @NonNull
//     public static Status createQueued(@NonNull String id) {
//         return new Status(id, StatusType.QUEUED, 0, null, null);
//     }
// 
//     @NonNull
//     public static Status createSending(@NonNull String id, int progress) {
//         return new Status(id, StatusType.SENDING, progress, null, null);
//     }
// 
//     @NonNull
//     public static Status createCompleted(@NonNull String id, @Nullable Object response) {
//         return new Status(id, StatusType.COMPLETED, 0, null, response);
//     }
// 
//     @NonNull
//     public static Status createFailed(@NonNull String id, @NonNull ErrorType error) {
//         return new Status(id, StatusType.FAILED, 0, error, null);
//     }
// 
//     @NonNull
//     public static Status createInvalid(@NonNull String id) {
//         return new Status(id, StatusType.INVALID, 0, null, null);
//     }
// 
//     @NonNull
//     public String id() {
//         return id;
//     }
// 
//     @NonNull
//     public StatusType statusType() {
//         return status;
//     }
// 
//     public int progress() {
//         return progress;
//     }
// 
//     @NonNull
//     public Status withProgress(int progress) {
//         return createSending(id, progress);
//     }
// 
//     @Nullable
//     public ErrorType error() {
//         return error;
//     }
// 
//     @Nullable
//     public Object response() {
//         return response;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         Status jobStatus = (Status) o;
// 
//         if (progress != jobStatus.progress) return false;
//         if (status != jobStatus.status) return false;
//         if (error != jobStatus.error) return false;
//         if (!id.equals(jobStatus.id)) return false;
//         return response != null ? response.equals(jobStatus.response) : jobStatus.response == null;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = status.hashCode();
//         result = 31 * result + (error != null ? error.hashCode() : 0);
//         result = 31 * result + id.hashCode();
//         result = 31 * result + progress;
//         result = 31 * result + (response != null ? response.hashCode() : 0);
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "JobStatus{"
//                 + "status="
//                 + status
//                 + ", id="
//                 + id
//                 + ", progress="
//                 + progress
//                 + ", error="
//                 + error
//                 + ", response="
//                 + response
//                 + '}';
//     }
// }
// 
// Path: rxuploader-sample/src/main/java/com/jagsaund/rxuploader/sample/model/wire/PhotoJSONModel.java
// @AutoValue
// public abstract class PhotoJSONModel {
//     @NonNull
//     public static TypeAdapter<PhotoJSONModel> typeAdapter(Gson gson) {
//         return new AutoValue_PhotoJSONModel.GsonTypeAdapter(gson);
//     }
// 
//     @SerializedName("id")
//     public abstract int id();
// 
//     @SerializedName("user_id")
//     public abstract Integer userId();
// 
//     @SerializedName("name")
//     public abstract String name();
// 
//     @Nullable
//     @SerializedName("description")
//     public abstract String description();
// 
//     @SerializedName("width")
//     public abstract int width();
// 
//     @SerializedName("height")
//     public abstract int height();
// 
//     @SerializedName("image_url")
//     public abstract String imageUrl();
// 
//     @SerializedName("images")
//     public abstract List<ImageJSONModel> images();
// 
//     @SerializedName("user")
//     public abstract UserJSONModel user();
// }
// 
// Path: rxuploader/src/main/java/com/jagsaund/rxuploader/utils/StringUtils.java
// public class StringUtils {
//     private StringUtils() {
//     }
// 
//     public static boolean isNullOrEmpty(@Nullable CharSequence s) {
//         return s == null || s.length() == 0;
//     }
// 
//     @NonNull
//     public static String getOrDefault(@Nullable String s, @NonNull String t) {
//         return s != null ? s : t;
//     }
// 
//     @NonNull
//     public static String getOrEmpty(@Nullable String s) {
//         return getOrDefault(s, "");
//     }
// }


// Path: rxuploader-sample/src/main/java/com/jagsaund/rxuploader/sample/model/data/PhotoDataModel.java
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.jagsaund.rxuploader.job.Status;
import com.jagsaund.rxuploader.sample.model.wire.PhotoJSONModel;
import com.jagsaund.rxuploader.utils.StringUtils;

package com.jagsaund.rxuploader.sample.model.data;


public class PhotoDataModel implements DataModel {
    @NonNull
    public static DataModel create(@NonNull PhotoJSONModel model) {
        return new PhotoDataModel(String.valueOf(model.id()), model.name(),
                model.description(), model.imageUrl());
    }

    @NonNull private final String id;
    @NonNull private final String name;
    @NonNull private final String description;
    @NonNull private final String url;
    @NonNull private final Status status;