1d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru/*
2d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Copyright (C) 2011 The Android Open Source Project
3d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru *
4d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Licensed under the Apache License, Version 2.0 (the "License");
5d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * you may not use this file except in compliance with the License.
6d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * You may obtain a copy of the License at
7d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru *
8d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru *      http://www.apache.org/licenses/LICENSE-2.0
9d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru *
10d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Unless required by applicable law or agreed to in writing, software
11d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * distributed under the License is distributed on an "AS IS" BASIS,
12d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * See the License for the specific language governing permissions and
14d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * limitations under the License.
15d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */
16d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
17d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Querupackage com.android.volley;
18d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
19d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru/**
20d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Encapsulates a parsed response for delivery.
21d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru *
22d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * @param <T> Parsed type of this response
23d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */
24d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Querupublic class Response<T> {
25d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
26d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    /** Callback interface for delivering parsed responses. */
27d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public interface Listener<T> {
28d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        /** Called when a response is received. */
29d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        public void onResponse(T response);
30d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
31d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
32d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    /** Callback interface for delivering error responses. */
33d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public interface ErrorListener {
34d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        /**
35d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru         * Callback method that an error has been occurred with the
36d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru         * provided error code and optional user-readable message.
37d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru         */
38d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        public void onErrorResponse(VolleyError error);
39d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
40d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
41d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    /** Returns a successful response containing the parsed result. */
42d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public static <T> Response<T> success(T result, Cache.Entry cacheEntry) {
43d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        return new Response<T>(result, cacheEntry);
44d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
45d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
46d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    /**
47d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru     * Returns a failed response containing the given error code and an optional
48d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru     * localized message displayed to the user.
49d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru     */
50d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public static <T> Response<T> error(VolleyError error) {
51d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        return new Response<T>(error);
52d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
53d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
54d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    /** Parsed response, or null in the case of error. */
55d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public final T result;
56d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
57d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    /** Cache metadata for this response, or null in the case of error. */
58d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public final Cache.Entry cacheEntry;
59d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
60d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    /** Detailed error information if <code>errorCode != OK</code>. */
61d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public final VolleyError error;
62d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
63d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    /** True if this response was a soft-expired one and a second one MAY be coming. */
64d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public boolean intermediate = false;
65d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
66d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    /**
67d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru     * Returns whether this response is considered successful.
68d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru     */
69d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public boolean isSuccess() {
70d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        return error == null;
71d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
72d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
73d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
74d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    private Response(T result, Cache.Entry cacheEntry) {
75d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        this.result = result;
76d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        this.cacheEntry = cacheEntry;
77d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        this.error = null;
78d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
79d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
80d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    private Response(VolleyError error) {
81d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        this.result = null;
82d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        this.cacheEntry = null;
83d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        this.error = error;
84d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
85d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru}
86