From d02a336dbc0ee39b14e0d5bde27a6ee740eafe59 Mon Sep 17 00:00:00 2001 From: chengww Date: Fri, 28 Dec 2018 11:15:50 +0800 Subject: [PATCH 01/12] Update the project type from application to library --- qingstor-sdk-android/build.gradle | 5 ++--- qingstor-sdk-android/src/main/AndroidManifest.xml | 8 +------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/qingstor-sdk-android/build.gradle b/qingstor-sdk-android/build.gradle index 83ac947..dbbd238 100644 --- a/qingstor-sdk-android/build.gradle +++ b/qingstor-sdk-android/build.gradle @@ -1,14 +1,13 @@ -apply plugin: 'com.android.application' +apply plugin: 'com.android.library' android { compileSdkVersion 28 defaultConfig { - applicationId "com.chengww.qingstor_sdk_android" minSdkVersion 19 targetSdkVersion 28 versionCode 1 - versionName "1.0" + versionName rootProject.ext.versionName testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { diff --git a/qingstor-sdk-android/src/main/AndroidManifest.xml b/qingstor-sdk-android/src/main/AndroidManifest.xml index 00c14e4..86c069c 100644 --- a/qingstor-sdk-android/src/main/AndroidManifest.xml +++ b/qingstor-sdk-android/src/main/AndroidManifest.xml @@ -1,8 +1,2 @@ - - - + package="com.chengww.qingstor_sdk_android"/> From 8c0cc1f6639808971550164c3336ddd1dd4c303d Mon Sep 17 00:00:00 2001 From: chengww Date: Wed, 27 Feb 2019 17:31:43 +0800 Subject: [PATCH 02/12] Checkout to the android branch --- qingstor-sdk-java | 1 + 1 file changed, 1 insertion(+) create mode 160000 qingstor-sdk-java diff --git a/qingstor-sdk-java b/qingstor-sdk-java new file mode 160000 index 0000000..e07a0bb --- /dev/null +++ b/qingstor-sdk-java @@ -0,0 +1 @@ +Subproject commit e07a0bb546016de1e980daa1fe326dcf01480f40 From af6def8b49252507891a7679c6b79d7d325d8a43 Mon Sep 17 00:00:00 2001 From: chengww Date: Wed, 27 Feb 2019 17:33:03 +0800 Subject: [PATCH 03/12] Update qingstor-sdk-java in android module --- .../com/qingstor/sdk/config/EnvContext.java | 7 ------- .../sdk/request/QSOkHttpRequestClient.java | 6 +++--- .../qingstor/sdk/request/RequestHandler.java | 4 ++-- .../sdk/request/impl/ProgressRequestBody.java | 19 +++++++++++++++--- .../java/com/qingstor/sdk/service/Bucket.java | 11 +++++++++- .../qingstor/sdk/upload/UploadManager.java | 20 +++++++++---------- 6 files changed, 41 insertions(+), 26 deletions(-) diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EnvContext.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EnvContext.java index 8c02dfb..6819116 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EnvContext.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EnvContext.java @@ -17,16 +17,9 @@ package com.qingstor.sdk.config; import com.qingstor.sdk.constants.QSConstant; -import com.qingstor.sdk.exception.QSException; import com.qingstor.sdk.request.ParamValidate; import com.qingstor.sdk.utils.QSStringUtil; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.util.Map; - public class EnvContext implements ParamValidate { public static String qingcloudStorHost = "qingstor.com"; diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/QSOkHttpRequestClient.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/QSOkHttpRequestClient.java index b2f4bfe..b05e200 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/QSOkHttpRequestClient.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/QSOkHttpRequestClient.java @@ -16,7 +16,7 @@ package com.qingstor.sdk.request; -import com.chengww.qingstor_sdk_android.AndroidUtils; +import com.chengww.qingstor_sdk_android.QingstorHelper; import com.qingstor.sdk.constants.QSConstant; import com.qingstor.sdk.exception.QSException; import com.qingstor.sdk.model.OutputModel; @@ -205,7 +205,7 @@ public void onResponse(Call call, okhttp3.Response response) { if (callBack != null) { final OutputModel m = QSParamInvokeUtil.getOutputModel(callBack); fillResponseValue2Object(response, m); - AndroidUtils.getInstance().runOnUiThread(new Runnable() { + QingstorHelper.getInstance().runOnUiThread(new Runnable() { @Override public void run() { callBack.onAPIResponse(m); @@ -234,7 +234,7 @@ private void onOkhttpFailure(Exception e, final ResponseCallBack callBack) { errorCode = QSConstant.REQUEST_ERROR_CANCELLED; // Cancelled by users. final OutputModel m = QSParamInvokeUtil.getOutputModel(callBack); fillResponseCallbackModel(errorCode, e.getMessage(), m); - AndroidUtils.getInstance().runOnUiThread(new Runnable() { + QingstorHelper.getInstance().runOnUiThread(new Runnable() { @Override public void run() { callBack.onAPIResponse(m); diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/RequestHandler.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/RequestHandler.java index 49b8f5d..9c2726e 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/RequestHandler.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/RequestHandler.java @@ -16,7 +16,7 @@ package com.qingstor.sdk.request; -import com.chengww.qingstor_sdk_android.AndroidUtils; +import com.chengww.qingstor_sdk_android.QingstorHelper; import com.qingstor.sdk.annotation.ParamAnnotation; import com.qingstor.sdk.config.EnvContext; import com.qingstor.sdk.constants.QSConstant; @@ -78,7 +78,7 @@ public void sendAsync() throws QSException { final OutputModel out = QSParamInvokeUtil.getOutputModel(this.asyncCallback); QSOkHttpRequestClient.fillResponseCallbackModel( QSConstant.REQUEST_ERROR_CODE, validate, out); - AndroidUtils.getInstance().runOnUiThread(new Runnable() { + QingstorHelper.getInstance().runOnUiThread(new Runnable() { @Override public void run() { asyncCallback.onAPIResponse(out); diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/impl/ProgressRequestBody.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/impl/ProgressRequestBody.java index 4b7d67e..235d76c 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/impl/ProgressRequestBody.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/request/impl/ProgressRequestBody.java @@ -11,6 +11,7 @@ */ package com.qingstor.sdk.request.impl; +import com.chengww.qingstor_sdk_android.QingstorHelper; import com.qingstor.sdk.request.BodyProgressListener; import com.qingstor.sdk.request.CancellationHandler; @@ -50,7 +51,7 @@ public void writeTo(BufferedSink bufferedSink) throws IOException { // 计算总长度 Buffer buffer = new Buffer(); requestBody.writeTo(buffer); - long size = buffer.size(); + final long size = buffer.size(); if (size == -1) { return; } @@ -64,14 +65,26 @@ public void writeTo(BufferedSink bufferedSink) throws IOException { buffer.copyTo(bufferedSink.buffer(), writeSize, blockSize); bufferedSink.flush(); writeSize += blockSize; - listener.onProgress(writeSize, size); + final long finalWriteSize = writeSize; + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + listener.onProgress(finalWriteSize, size); + } + }); } if (cancellationHandler != null && cancellationHandler.isCancelled()) throw new CancellationHandler.CancellationException(); buffer.copyTo(bufferedSink.buffer(), writeSize, size - writeSize); bufferedSink.flush(); - listener.onProgress(writeSize, size); + final long finalWriteSize2 = writeSize; + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + listener.onProgress(finalWriteSize2, size); + } + }); buffer.clear(); } else { requestBody.writeTo(bufferedSink); diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/service/Bucket.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/service/Bucket.java index 66391c8..759598e 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/service/Bucket.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/service/Bucket.java @@ -29,6 +29,7 @@ import com.qingstor.sdk.utils.QSSignatureUtil; import com.qingstor.sdk.utils.QSStringUtil; import java.io.File; +import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -47,11 +48,19 @@ * * Now you can use the object bucket to do the operations. */ -public class Bucket { +public class Bucket implements Serializable { private String zone; private String bucketName; private EnvContext envContext; + public String getZone() { + return zone; + } + + public String getBucketName() { + return bucketName; + } + public Bucket(EnvContext envContext, String zone, String bucketName) { this.envContext = envContext; this.zone = zone; diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/upload/UploadManager.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/upload/UploadManager.java index 9c662de..db4ab60 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/upload/UploadManager.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/upload/UploadManager.java @@ -15,7 +15,7 @@ // +------------------------------------------------------------------------- package com.qingstor.sdk.upload; -import com.chengww.qingstor_sdk_android.AndroidUtils; +import com.chengww.qingstor_sdk_android.QingstorHelper; import com.google.gson.Gson; import com.qingstor.sdk.annotation.ParamAnnotation; import com.qingstor.sdk.constants.QSConstant; @@ -73,7 +73,7 @@ public void put(File file) throws QSException { if (!file.exists() || file.isDirectory()) throw new QSException("File does not exist or it is a directory."); - put(file, file.getName(), file.getName(), ""); + put(file, file.getName(), null, ""); } /** @@ -136,7 +136,7 @@ public void putFileMulti(File file, final String objectKey, String fileName, Str final OutputModel outputModel = new OutputModel(); outputModel.setStatueCode(code); outputModel.setMessage(initOutput.getMessage()); - AndroidUtils.getInstance().runOnUiThread(new Runnable() { + QingstorHelper.getInstance().runOnUiThread(new Runnable() { @Override public void run() { callBack.onAPIResponse(objectKey, outputModel); @@ -158,7 +158,7 @@ public void run() { final OutputModel outputModel = new OutputModel(); outputModel.setStatueCode(201); outputModel.setMessage("This task has been uploaded."); - AndroidUtils.getInstance().runOnUiThread(new Runnable() { + QingstorHelper.getInstance().runOnUiThread(new Runnable() { @Override public void run() { callBack.onAPIResponse(objectKey, outputModel); @@ -204,7 +204,7 @@ public void run() { @Override public void onProgress(long len, long size) { final long bytesWritten = uploadModel.getCurrentPart() * partSize + len; - AndroidUtils.getInstance().runOnUiThread(new Runnable() { + QingstorHelper.getInstance().runOnUiThread(new Runnable() { @Override public void run() { progressListener.onProgress(objectKey, bytesWritten, length); @@ -228,7 +228,7 @@ public void run() { setData(objectKey, recorder); // On upload failed if (callBack != null) { - AndroidUtils.getInstance().runOnUiThread(new Runnable() { + QingstorHelper.getInstance().runOnUiThread(new Runnable() { @Override public void run() { callBack.onAPIResponse(objectKey, send); @@ -327,7 +327,7 @@ private void completeMultiUpload(final String objectKey, String fileName, String // Response callback. if (callBack != null) { - AndroidUtils.getInstance().runOnUiThread(new Runnable() { + QingstorHelper.getInstance().runOnUiThread(new Runnable() { @Override public void run() { callBack.onAPIResponse(objectKey, send); @@ -368,7 +368,7 @@ public void putFile(File file, final String objectKey, requestHandler.setProgressListener(new BodyProgressListener() { @Override public void onProgress(final long len, final long size) { - AndroidUtils.getInstance().runOnUiThread(new Runnable() { + QingstorHelper.getInstance().runOnUiThread(new Runnable() { @Override public void run() { progressListener.onProgress(objectKey, len, size); @@ -386,7 +386,7 @@ public void run() { final OutputModel outputModel = requestHandler.send(); if (callBack != null) { - AndroidUtils.getInstance().runOnUiThread(new Runnable() { + QingstorHelper.getInstance().runOnUiThread(new Runnable() { @Override public void run() { callBack.onAPIResponse(objectKey, outputModel); @@ -401,7 +401,7 @@ public static class CompleteMultipartUploadInput private Long contentLength; - @ParamAnnotation(paramType = "header", paramName = "Content-Length") + @ParamAnnotation(paramType = "header", paramName = "content-length") public Long getContentLength() { return contentLength; } From f996a8e74e509ce1183d23c39cf6b22d98c986a1 Mon Sep 17 00:00:00 2001 From: chengww Date: Wed, 27 Feb 2019 17:33:40 +0800 Subject: [PATCH 04/12] Update proguard rules --- qingstor-sdk-android/proguard-rules.pro | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/qingstor-sdk-android/proguard-rules.pro b/qingstor-sdk-android/proguard-rules.pro index 90e49c1..8b0f6e2 100644 --- a/qingstor-sdk-android/proguard-rules.pro +++ b/qingstor-sdk-android/proguard-rules.pro @@ -43,6 +43,7 @@ ##---------------End: proguard configuration for Gson ---------- +##---------------Begin: proguard configuration for okhttp ---------- # JSR 305 annotations are for embedding nullability information. -dontwarn javax.annotation.** @@ -54,6 +55,10 @@ # OkHttp platform used only on JVM and when Conscrypt dependency is available. -dontwarn okhttp3.internal.platform.ConscryptPlatform +##---------------End: proguard configuration for okhttp ---------- +##---------------Begin: proguard configuration for qingstor-sdk-java ---------- -keep class com.qingstor.sdk.model.** { *; } --keep class com.qingstor.sdk.service.** { *; } \ No newline at end of file +-keep class com.qingstor.sdk.service.** { *; } +-keep class com.chengww.qingstor_sdk_android.R$* { *;} +##---------------End: proguard configuration for qingstor-sdk-java ---------- \ No newline at end of file From 8be38ca245e2d75dda29a58cc3e2ecef3eba8095 Mon Sep 17 00:00:00 2001 From: chengww Date: Wed, 27 Feb 2019 17:56:27 +0800 Subject: [PATCH 05/12] Add license --- LICENSE | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2b0dde0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 chengww + + 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. \ No newline at end of file From 21a3c405da8d214cbd63fd32cda0c4ab5b5bf6f0 Mon Sep 17 00:00:00 2001 From: chengww Date: Wed, 6 Mar 2019 15:23:38 +0800 Subject: [PATCH 06/12] Update gradle files --- build.gradle | 5 +++-- qingstor-sdk-android/bintray.gradle | 6 +++--- qingstor-sdk-android/build.gradle | 2 +- settings.gradle | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 7abded5..4b2ffc9 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { classpath 'com.android.tools.build:gradle:3.2.1' classpath "com.github.dcendents:android-maven-gradle-plugin:2.1" classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" - + // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -21,6 +21,7 @@ allprojects { repositories { google() jcenter() + maven { url "https://jitpack.io" } } } @@ -29,5 +30,5 @@ task clean(type: Delete) { } ext { - versionName = '0.0.1' + versionName = '0.1.0' } \ No newline at end of file diff --git a/qingstor-sdk-android/bintray.gradle b/qingstor-sdk-android/bintray.gradle index 997f565..c3808d7 100644 --- a/qingstor-sdk-android/bintray.gradle +++ b/qingstor-sdk-android/bintray.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.jfrog.bintray' version = rootProject.ext.versionName -def siteUrl = 'https://github.com/chengww5217/qingstor-sdk-android.git' +def siteUrl = 'https://github.com/chengww5217/qingstor-sdk-android' def gitUrl = 'https://github.com/chengww5217/qingstor-sdk-android.git' group = "com.chengww" @@ -64,7 +64,7 @@ javadoc { } artifacts { -// archives javadocJar + archives javadocJar archives sourcesJar } @@ -84,7 +84,7 @@ bintray { configurations = ['archives'] pkg { repo = "chengww" - name = "qingstor_sdk_android" + name = "qingstor-sdk-android" websiteUrl = siteUrl vcsUrl = gitUrl licenses = ["Apache-2.0"] diff --git a/qingstor-sdk-android/build.gradle b/qingstor-sdk-android/build.gradle index dbbd238..dd64d77 100644 --- a/qingstor-sdk-android/build.gradle +++ b/qingstor-sdk-android/build.gradle @@ -12,7 +12,7 @@ android { } buildTypes { release { - minifyEnabled true + minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } diff --git a/settings.gradle b/settings.gradle index 3bde8b8..3530ec6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':qingstor-sdk-android' +include ':qingstor-sdk-android', ':demo' From 5d58e729457d46293bc50c15f3e001e7709a3e27 Mon Sep 17 00:00:00 2001 From: chengww Date: Wed, 6 Mar 2019 15:24:07 +0800 Subject: [PATCH 07/12] Update qingstor-sdk-java --- qingstor-sdk-java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qingstor-sdk-java b/qingstor-sdk-java index e07a0bb..f904b96 160000 --- a/qingstor-sdk-java +++ b/qingstor-sdk-java @@ -1 +1 @@ -Subproject commit e07a0bb546016de1e980daa1fe326dcf01480f40 +Subproject commit f904b96b8b584c596d264216052be7d5ad34f7f2 From 187f480278e6d280ba5299fd750ca17816123a3a Mon Sep 17 00:00:00 2001 From: chengww Date: Wed, 6 Mar 2019 15:25:02 +0800 Subject: [PATCH 08/12] Update qingstor-sdk-android --- .../qingstor_sdk_android/AndroidUtils.java | 32 - .../qingstor_sdk_android/QingstorHelper.java | 96 +++ .../qingstor_sdk_android/db/BaseDao.java | 358 +++++++++++ .../qingstor_sdk_android/db/ColumnEntity.java | 49 ++ .../qingstor_sdk_android/db/DBHelper.java | 96 +++ .../qingstor_sdk_android/db/DBUtils.java | 83 +++ .../db/DownloadTaskManager.java | 90 +++ .../qingstor_sdk_android/db/MyBucket.java | 44 ++ .../qingstor_sdk_android/db/Progress.java | 222 +++++++ .../qingstor_sdk_android/db/TableEntity.java | 86 +++ .../db/UploadTaskManager.java | 90 +++ .../exception/TaskException.java | 179 ++++++ .../listener/DownloadListener.java | 30 + .../listener/ProgressListener.java | 33 + .../listener/UploadListener.java | 28 + .../recorder/DBBeanRecorder.java | 45 ++ .../task/DownloadTask.java | 454 +++++++++++++ .../task/DownloadThreadPool.java | 65 ++ .../qingstor_sdk_android/task/Downloader.java | 213 ++++++ .../task/MyCancellationHandler.java | 19 + .../task/PriorityBlockingQueue.java | 608 ++++++++++++++++++ .../task/PriorityObject.java | 30 + .../task/PriorityRunnable.java | 36 ++ .../qingstor_sdk_android/task/UploadTask.java | 318 +++++++++ .../task/UploadThreadPool.java | 65 ++ .../qingstor_sdk_android/task/Uploader.java | 196 ++++++ .../qingstor_sdk_android/task/XExecutor.java | 102 +++ .../qingstor_sdk_android/utils/IOUtils.java | 184 ++++++ .../qingstor_sdk_android/utils/ResUtils.java | 51 ++ .../com/qingstor/sdk/config/EnvContext.java | 4 +- .../com/qingstor/sdk/config/EvnContext.java | 4 +- .../qingstor/sdk/constants/QSConstant.java | 2 +- .../qingstor/sdk/exception/QSException.java | 2 +- .../com/qingstor/sdk/utils/QSJSONUtil.java | 6 +- .../src/main/res/values-zh/strings.xml | 50 ++ .../src/main/res/values/strings.xml | 51 +- 36 files changed, 3980 insertions(+), 41 deletions(-) delete mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/AndroidUtils.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/QingstorHelper.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/BaseDao.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/ColumnEntity.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DBHelper.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DBUtils.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DownloadTaskManager.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/MyBucket.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/Progress.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/TableEntity.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/UploadTaskManager.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/exception/TaskException.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/DownloadListener.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/ProgressListener.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/UploadListener.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/recorder/DBBeanRecorder.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/DownloadTask.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/DownloadThreadPool.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/Downloader.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/MyCancellationHandler.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityBlockingQueue.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityObject.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityRunnable.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/UploadTask.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/UploadThreadPool.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/Uploader.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/XExecutor.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/utils/IOUtils.java create mode 100644 qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/utils/ResUtils.java create mode 100644 qingstor-sdk-android/src/main/res/values-zh/strings.xml diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/AndroidUtils.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/AndroidUtils.java deleted file mode 100644 index c2570ce..0000000 --- a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/AndroidUtils.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.chengww.qingstor_sdk_android; - -import android.os.Handler; -import android.os.Looper; - -/** - * Created by chengww on 2018/12/25. - */ -public class AndroidUtils { - private Handler mDelivery; - - private AndroidUtils() { - mDelivery = new Handler(Looper.getMainLooper()); - } - - private static class StoreSDKHolder { - private static AndroidUtils holder = new AndroidUtils(); - } - - public static AndroidUtils getInstance() { - return StoreSDKHolder.holder; - } - - public Handler getDelivery() { - return mDelivery; - } - - public void runOnUiThread(Runnable run) { - getDelivery().post(run); - } - -} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/QingstorHelper.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/QingstorHelper.java new file mode 100644 index 0000000..156e67b --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/QingstorHelper.java @@ -0,0 +1,96 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android; + +import android.app.Application; +import android.os.Handler; +import android.os.Looper; + +import com.chengww.qingstor_sdk_android.db.DownloadTaskManager; +import com.chengww.qingstor_sdk_android.db.UploadTaskManager; +import com.chengww.qingstor_sdk_android.exception.TaskException; +import com.chengww.qingstor_sdk_android.task.Downloader; +import com.chengww.qingstor_sdk_android.task.Uploader; +import com.chengww.qingstor_sdk_android.utils.IOUtils; +import com.qingstor.sdk.model.OutputModel; + +/** + * Created by chengww on 2018/12/25. + */ +public class QingstorHelper { + public static long REFRESH_TIME = 300; // Callback refresh time(ms) + private Application context; // Application context + private Handler mDelivery; + + private QingstorHelper() { + mDelivery = new Handler(Looper.getMainLooper()); + } + + private static class StoreSDKHolder { + private static QingstorHelper holder = new QingstorHelper(); + } + + public static QingstorHelper getInstance() { + return StoreSDKHolder.holder; + } + + public void runOnUiThread(Runnable run) { + getDelivery().post(run); + } + + /** + * Must call in the Application. If not, download/upload tasks info cannot recorded. + * + * @param context Application context + * @return this + */ + public QingstorHelper init(Application context) { + this.context = context; + // Restore tasks from the database when the application is starting + Downloader.getInstance(); + Downloader.restore(DownloadTaskManager.getInstance().getAll()); + + Uploader.getInstance(); + Uploader.restore(UploadTaskManager.getInstance().getAll()); + return this; + } + + public Application getContext() { + IOUtils.checkNotNull(context, "Please call QingstorHelper.getInstance().init() first in application!"); + return context; + } + + + public Handler getDelivery() { + return mDelivery; + } + + /** + * Handle the response of the sdk. + * If status code is error, a {@link TaskException} will be thrown. + * Else, your request is successful. + * @param out response + * @throws TaskException error exception + */ + public void handleResponse(OutputModel out) throws TaskException { + if (out == null) return; + if (out.getStatueCode() >= 400) { + throw new TaskException(out); + } + } + + +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/BaseDao.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/BaseDao.java new file mode 100644 index 0000000..549bcd8 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/BaseDao.java @@ -0,0 +1,358 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.db; + +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Pair; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public abstract class BaseDao { + + protected static String TAG; + private static final Lock lock = new ReentrantLock(); + protected SQLiteOpenHelper helper; + protected SQLiteDatabase database; + + public BaseDao(SQLiteOpenHelper helper) { + TAG = getClass().getSimpleName(); + this.helper = helper; + this.database = openWriter(); + } + + public SQLiteDatabase openReader() { + return helper.getReadableDatabase(); + } + + public SQLiteDatabase openWriter() { + return helper.getWritableDatabase(); + } + + protected final void closeDatabase(SQLiteDatabase database, Cursor cursor) { + if (cursor != null && !cursor.isClosed()) cursor.close(); + if (database != null && database.isOpen()) database.close(); + } + + public boolean insert(T t) { + if (t == null) return false; + lock.lock(); + try { + database.beginTransaction(); + database.insert(getTableName(), null, getContentValues(t)); + database.setTransactionSuccessful(); + return true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + database.endTransaction(); + lock.unlock(); + } + return false; + } + + public long insert(SQLiteDatabase database, T t) { + return database.insert(getTableName(), null, getContentValues(t)); + } + + public boolean insert(List ts) { + if (ts == null) return false; + lock.lock(); + try { + database.beginTransaction(); + for (T t : ts) { + database.insert(getTableName(), null, getContentValues(t)); + } + database.setTransactionSuccessful(); + return true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + database.endTransaction(); + lock.unlock(); + } + return false; + } + + public boolean insert(SQLiteDatabase database, List ts) { + try { + for (T t : ts) { + database.insert(getTableName(), null, getContentValues(t)); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + public boolean deleteAll() { + return delete(null, null); + } + + public long deleteAll(SQLiteDatabase database) { + return delete(database, null, null); + } + + public boolean delete(String whereClause, String[] whereArgs) { + long start = System.currentTimeMillis(); + lock.lock(); + try { + database.beginTransaction(); + database.delete(getTableName(), whereClause, whereArgs); + database.setTransactionSuccessful(); + return true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + database.endTransaction(); + lock.unlock(); + } + return false; + } + + public long delete(SQLiteDatabase database, String whereClause, String[] whereArgs) { + return database.delete(getTableName(), whereClause, whereArgs); + } + + public boolean deleteList(List> where) { + lock.lock(); + try { + database.beginTransaction(); + for (Pair pair : where) { + database.delete(getTableName(), pair.first, pair.second); + } + database.setTransactionSuccessful(); + return true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + database.endTransaction(); + lock.unlock(); + } + return false; + } + + public boolean replace(T t) { + if (t == null) return false; + lock.lock(); + try { + database.beginTransaction(); + database.replace(getTableName(), null, getContentValues(t)); + database.setTransactionSuccessful(); + return true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + database.endTransaction(); + lock.unlock(); + } + return false; + } + + public long replace(SQLiteDatabase database, T t) { + return database.replace(getTableName(), null, getContentValues(t)); + } + + public boolean replace(ContentValues contentValues) { + lock.lock(); + try { + database.beginTransaction(); + database.replace(getTableName(), null, contentValues); + database.setTransactionSuccessful(); + return true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + database.endTransaction(); + lock.unlock(); + } + return false; + } + + public long replace(SQLiteDatabase database, ContentValues contentValues) { + return database.replace(getTableName(), null, contentValues); + } + + public boolean replace(List ts) { + if (ts == null) return false; + lock.lock(); + try { + database.beginTransaction(); + for (T t : ts) { + database.replace(getTableName(), null, getContentValues(t)); + } + database.setTransactionSuccessful(); + return true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + database.endTransaction(); + lock.unlock(); + } + return false; + } + + public boolean replace(SQLiteDatabase database, List ts) { + try { + for (T t : ts) { + database.replace(getTableName(), null, getContentValues(t)); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + public boolean update(T t, String whereClause, String[] whereArgs) { + if (t == null) return false; + lock.lock(); + try { + database.beginTransaction(); + database.update(getTableName(), getContentValues(t), whereClause, whereArgs); + database.setTransactionSuccessful(); + return true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + database.endTransaction(); + lock.unlock(); + } + return false; + } + + public long update(SQLiteDatabase database, T t, String whereClause, String[] whereArgs) { + return database.update(getTableName(), getContentValues(t), whereClause, whereArgs); + } + + public boolean update(ContentValues contentValues, String whereClause, String[] whereArgs) { + long start = System.currentTimeMillis(); + lock.lock(); + try { + database.beginTransaction(); + database.update(getTableName(), contentValues, whereClause, whereArgs); + database.setTransactionSuccessful(); + return true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + database.endTransaction(); + lock.unlock(); + } + return false; + } + + public long update(SQLiteDatabase database, ContentValues contentValues, String whereClause, String[] whereArgs) { + return database.update(getTableName(), contentValues, whereClause, whereArgs); + } + + public List queryAll(SQLiteDatabase database) { + return query(database, null, null); + } + + public List query(SQLiteDatabase database, String selection, String[] selectionArgs) { + return query(database, null, selection, selectionArgs, null, null, null, null); + } + + public T queryOne(SQLiteDatabase database, String selection, String[] selectionArgs) { + List query = query(database, null, selection, selectionArgs, null, null, null, "1"); + if (query.size() > 0) return query.get(0); + return null; + } + + public List query(SQLiteDatabase database, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) { + List list = new ArrayList<>(); + Cursor cursor = null; + try { + cursor = database.query(getTableName(), columns, selection, selectionArgs, groupBy, having, orderBy, limit); + while (!cursor.isClosed() && cursor.moveToNext()) { + list.add(parseCursorToBean(cursor)); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + closeDatabase(null, cursor); + } + return list; + } + + public List queryAll() { + return query(null, null); + } + + public List query(String selection, String[] selectionArgs) { + return query(null, selection, selectionArgs, null, null, null, null); + } + + public T queryOne(String selection, String[] selectionArgs) { + List query = query(null, selection, selectionArgs, null, null, null, "1"); + return query.size() > 0 ? query.get(0) : null; + } + + public List query(String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) { + lock.lock(); + List list = new ArrayList<>(); + Cursor cursor = null; + try { + database.beginTransaction(); + cursor = database.query(getTableName(), columns, selection, selectionArgs, groupBy, having, orderBy, limit); + while (!cursor.isClosed() && cursor.moveToNext()) { + list.add(parseCursorToBean(cursor)); + } + database.setTransactionSuccessful(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + closeDatabase(null, cursor); + database.endTransaction(); + lock.unlock(); + } + return list; + } + + public interface Action { + void call(SQLiteDatabase database); + } + + public void startTransaction(Action action) { + lock.lock(); + try { + database.beginTransaction(); + action.call(database); + database.setTransactionSuccessful(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + database.endTransaction(); + lock.unlock(); + } + } + + + public abstract String getTableName(); + + public abstract void unInit(); + + public abstract T parseCursorToBean(Cursor cursor); + + public abstract ContentValues getContentValues(T t); +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/ColumnEntity.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/ColumnEntity.java new file mode 100644 index 0000000..b5433ea --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/ColumnEntity.java @@ -0,0 +1,49 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.db; + +/** + * Created by chengww on 2018/12/28. + */ +public class ColumnEntity { + + public String columnName; + public String columnType; + public String[] compositePrimaryKey; + public boolean isPrimary; + public boolean isNotNull; + public boolean isAutoincrement; + + public ColumnEntity(String... compositePrimaryKey) { + this.compositePrimaryKey = compositePrimaryKey; + } + + public ColumnEntity(String columnName, String columnType) { + this(columnName, columnType, false, false, false); + } + + public ColumnEntity(String columnName, String columnType, boolean isPrimary, boolean isNotNull) { + this(columnName, columnType, isPrimary, isNotNull, false); + } + + public ColumnEntity(String columnName, String columnType, boolean isPrimary, boolean isNotNull, boolean isAutoincrement) { + this.columnName = columnName; + this.columnType = columnType; + this.isPrimary = isPrimary; + this.isNotNull = isNotNull; + this.isAutoincrement = isAutoincrement; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DBHelper.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DBHelper.java new file mode 100644 index 0000000..2b12dc3 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DBHelper.java @@ -0,0 +1,96 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.db; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import com.chengww.qingstor_sdk_android.QingstorHelper; + +/** + * Created by chengww on 2018/12/28. + */ +class DBHelper extends SQLiteOpenHelper { + + private static final String DB_CACHE_NAME = "qingstor_upload_download_tasks.db"; + private static final int DB_CACHE_VERSION = 1; + static final String TABLE_DOWNLOAD = "downloader"; + static final String TABLE_UPLOAD = "uploader"; + + private TableEntity downloadTableEntity = new TableEntity(TABLE_DOWNLOAD); + private TableEntity uploadTableEntity = new TableEntity(TABLE_UPLOAD); + + DBHelper() { + this(QingstorHelper.getInstance().getContext()); + } + + DBHelper(Context context) { + super(context, DB_CACHE_NAME, null, DB_CACHE_VERSION); + + downloadTableEntity.addColumn(new ColumnEntity(Progress.TAG, "VARCHAR", true, true)) + .addColumn(new ColumnEntity(Progress.BUCKET, "BLOB")) + .addColumn(new ColumnEntity(Progress.OBJECT_KEY, "VARCHAR")) + .addColumn(new ColumnEntity(Progress.FOLDER, "VARCHAR")) + .addColumn(new ColumnEntity(Progress.FILE_PATH, "VARCHAR")) + .addColumn(new ColumnEntity(Progress.FILE_NAME, "VARCHAR")) + .addColumn(new ColumnEntity(Progress.FRACTION, "VARCHAR")) + .addColumn(new ColumnEntity(Progress.TOTAL_SIZE, "INTEGER")) + .addColumn(new ColumnEntity(Progress.CURRENT_SIZE, "INTEGER")) + .addColumn(new ColumnEntity(Progress.STATUS, "INTEGER")) + .addColumn(new ColumnEntity(Progress.DATE, "INTEGER")) + .addColumn(new ColumnEntity(Progress.EXTRA1, "BLOB")) + .addColumn(new ColumnEntity(Progress.EXTRA2, "BLOB")) + .addColumn(new ColumnEntity(Progress.EXTRA3, "BLOB")) + .addColumn(new ColumnEntity(Progress.RECORDER_BEAN, "BLOB")); + + uploadTableEntity.addColumn(new ColumnEntity(Progress.TAG, "VARCHAR", true, true)) + .addColumn(new ColumnEntity(Progress.BUCKET, "BLOB")) + .addColumn(new ColumnEntity(Progress.OBJECT_KEY, "VARCHAR")) + .addColumn(new ColumnEntity(Progress.FOLDER, "VARCHAR")) + .addColumn(new ColumnEntity(Progress.FILE_PATH, "VARCHAR")) + .addColumn(new ColumnEntity(Progress.FILE_NAME, "VARCHAR")) + .addColumn(new ColumnEntity(Progress.FRACTION, "VARCHAR")) + .addColumn(new ColumnEntity(Progress.TOTAL_SIZE, "INTEGER")) + .addColumn(new ColumnEntity(Progress.CURRENT_SIZE, "INTEGER")) + .addColumn(new ColumnEntity(Progress.STATUS, "INTEGER")) + .addColumn(new ColumnEntity(Progress.DATE, "INTEGER")) + .addColumn(new ColumnEntity(Progress.EXTRA1, "BLOB")) + .addColumn(new ColumnEntity(Progress.EXTRA2, "BLOB")) + .addColumn(new ColumnEntity(Progress.EXTRA3, "BLOB")) + .addColumn(new ColumnEntity(Progress.RECORDER_BEAN, "BLOB")); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL(downloadTableEntity.buildTableString()); + db.execSQL(uploadTableEntity.buildTableString()); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + if (DBUtils.isNeedUpgradeTable(db, downloadTableEntity)) + db.execSQL("DROP TABLE IF EXISTS " + TABLE_DOWNLOAD); + if (DBUtils.isNeedUpgradeTable(db, uploadTableEntity)) + db.execSQL("DROP TABLE IF EXISTS " + TABLE_UPLOAD); + onCreate(db); + } + + @Override + public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + onUpgrade(db, oldVersion, newVersion); + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DBUtils.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DBUtils.java new file mode 100644 index 0000000..abef1a1 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DBUtils.java @@ -0,0 +1,83 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.db; + +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +/** + * Created by chengww on 2018/12/28. + */ +public class DBUtils { + + public static boolean isNeedUpgradeTable(SQLiteDatabase db, TableEntity table) { + if (!isTableExists(db, table.tableName)) return true; + + Cursor cursor = db.rawQuery("select * from " + table.tableName, null); + if (cursor == null) return false; + try { + int columnCount = table.getColumnCount(); + if (columnCount == cursor.getColumnCount()) { + for (int i = 0; i < columnCount; i++) { + if (table.getColumnIndex(cursor.getColumnName(i)) == -1) { + return true; + } + } + } else { + return true; + } + return false; + } finally { + cursor.close(); + } + } + + public static boolean isTableExists(SQLiteDatabase db, String tableName) { + if (tableName == null || db == null || !db.isOpen()) return false; + + Cursor cursor = null; + int count = 0; + try { + cursor = db.rawQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = ? AND name = ?", new String[]{"table", tableName}); + if (!cursor.moveToFirst()) { + return false; + } + count = cursor.getInt(0); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (cursor != null) cursor.close(); + } + return count > 0; + } + + public static boolean isFieldExists(SQLiteDatabase db, String tableName, String fieldName) { + if (tableName == null || db == null || fieldName == null || !db.isOpen()) return false; + + Cursor cursor = null; + try { + cursor = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 0", null); + return cursor != null && cursor.getColumnIndex(fieldName) != -1; + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + if (cursor != null) { + cursor.close(); + } + } + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DownloadTaskManager.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DownloadTaskManager.java new file mode 100644 index 0000000..46f5e32 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/DownloadTaskManager.java @@ -0,0 +1,90 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.db; + +import android.content.ContentValues; +import android.database.Cursor; + +import java.util.List; + +/** + * Created by chengww on 2018/12/28. + */ +public class DownloadTaskManager extends BaseDao { + + private DownloadTaskManager() { + super(new DBHelper()); + } + + public static DownloadTaskManager getInstance() { + return DownloadManagerHolder.instance; + } + + private static class DownloadManagerHolder { + private static final DownloadTaskManager instance = new DownloadTaskManager(); + } + + @Override + public Progress parseCursorToBean(Cursor cursor) { + return Progress.parseCursorToBean(cursor); + } + + @Override + public ContentValues getContentValues(Progress progress) { + return Progress.buildContentValues(progress); + } + + @Override + public String getTableName() { + return DBHelper.TABLE_DOWNLOAD; + } + + @Override + public void unInit() { + } + + public Progress get(String tag) { + return queryOne(Progress.TAG + "=?", new String[]{tag}); + } + + public void delete(String taskKey) { + delete(Progress.TAG + "=?", new String[]{taskKey}); + } + + public boolean update(Progress progress) { + return update(progress, Progress.TAG + "=?", new String[]{progress.tag}); + } + + public boolean update(ContentValues contentValues, String tag) { + return update(contentValues, Progress.TAG + "=?", new String[]{tag}); + } + + public List getAll() { + return query(null, null, null, null, null, Progress.DATE + " ASC", null); + } + + public List getFinished() { + return query(null, "status=?", new String[]{Progress.FINISH + ""}, null, null, Progress.DATE + " ASC", null); + } + + public List getDownloading() { + return query(null, "status not in(?)", new String[]{Progress.FINISH + ""}, null, null, Progress.DATE + " ASC", null); + } + + public boolean clear() { + return deleteAll(); + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/MyBucket.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/MyBucket.java new file mode 100644 index 0000000..8bc0a27 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/MyBucket.java @@ -0,0 +1,44 @@ +package com.chengww.qingstor_sdk_android.db; + +import com.qingstor.sdk.config.EnvContext; + +import java.io.Serializable; + +/** + * Created by chengww on 2019/3/4. + */ +public class MyBucket implements Serializable { + private String zone; + private String bucketName; + private EnvContext envContext; + + public MyBucket(EnvContext envContext, String zone, String bucketName) { + this.zone = zone; + this.bucketName = bucketName; + this.envContext = envContext; + } + + public String getZone() { + return zone; + } + + public void setZone(String zone) { + this.zone = zone; + } + + public String getBucketName() { + return bucketName; + } + + public void setBucketName(String bucketName) { + this.bucketName = bucketName; + } + + public EnvContext getEnvContext() { + return envContext; + } + + public void setEnvContext(EnvContext envContext) { + this.envContext = envContext; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/Progress.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/Progress.java new file mode 100644 index 0000000..71ab42a --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/Progress.java @@ -0,0 +1,222 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.db; + +import android.content.ContentValues; +import android.database.Cursor; +import android.os.SystemClock; + +import com.chengww.qingstor_sdk_android.QingstorHelper; +import com.chengww.qingstor_sdk_android.exception.TaskException; +import com.chengww.qingstor_sdk_android.utils.IOUtils; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Progress implements Serializable { + + public static final int NONE = 0; // None status + public static final int WAITING = 1; + public static final int LOADING = 2; + public static final int PAUSE = 3; + public static final int ERROR = 4; + public static final int FINISH = 5; + + public static final String TAG = "tag"; + public static final String BUCKET = "bucket"; + public static final String OBJECT_KEY = "objectKey"; + public static final String FOLDER = "folder"; + public static final String FILE_PATH = "filePath"; + public static final String FILE_NAME = "fileName"; + public static final String FRACTION = "fraction"; + public static final String TOTAL_SIZE = "totalSize"; + public static final String CURRENT_SIZE = "currentSize"; + public static final String STATUS = "status"; + public static final String DATE = "date"; + public static final String EXTRA1 = "extra1"; + public static final String EXTRA2 = "extra2"; + public static final String EXTRA3 = "extra3"; + public static final String RECORDER_BEAN = "recorder_bean"; // Recorder's bean of UploadManager + + public String tag; + public MyBucket myBucket; + public String objectKey; + public String folder; // Kept folder + public String filePath; // File kept path + public String fileName; // File kept name + public float fraction; // Fraction, 0 - 1, float + public long totalSize; // Total bytes size, byte + public long currentSize; // Current bytes size, byte + public transient long speed; // Speed,bytes/s + public int status; + public long date; // Created date + public Serializable extra1; // Extra data + public Serializable extra2; + public Serializable extra3; + public TaskException exception; + public byte[] recorderBean; + + private transient long tempSize; + private transient long lastRefreshTime; + private transient List speedBuffer; + + public Progress() { + lastRefreshTime = SystemClock.elapsedRealtime(); + totalSize = -1; + date = System.currentTimeMillis(); + speedBuffer = new ArrayList<>(); + } + + public static Progress changeProgress(Progress progress, long writeSize, Action action) { + return changeProgress(progress, writeSize, progress.totalSize, action); + } + + public static Progress changeProgress(final Progress progress, long writeSize, long totalSize, final Action action) { + progress.totalSize = totalSize; + progress.currentSize += writeSize; + progress.tempSize += writeSize; + + long currentTime = SystemClock.elapsedRealtime(); + boolean isNotify = (currentTime - progress.lastRefreshTime) >= QingstorHelper.REFRESH_TIME; + if (isNotify || progress.currentSize == totalSize) { + long diffTime = currentTime - progress.lastRefreshTime; + if (diffTime == 0) diffTime = 1; + progress.fraction = progress.currentSize * 1.0f / totalSize; + progress.speed = progress.bufferSpeed(progress.tempSize * 1000 / diffTime); + progress.lastRefreshTime = currentTime; + progress.tempSize = 0; + if (action != null) { + action.call(progress); + } + } + return progress; + } + + private long bufferSpeed(long speed) { + speedBuffer.add(speed); + if (speedBuffer.size() > 10) { + speedBuffer.remove(0); + } + long sum = 0; + for (float speedTemp : speedBuffer) { + sum += speedTemp; + } + return sum / speedBuffer.size(); + } + + public void from(Progress progress) { + totalSize = progress.totalSize; + currentSize = progress.currentSize; + fraction = progress.fraction; + speed = progress.speed; + lastRefreshTime = progress.lastRefreshTime; + tempSize = progress.tempSize; + } + + public interface Action { + void call(Progress progress); + } + + public static ContentValues buildContentValues(Progress progress) { + ContentValues values = new ContentValues(); + values.put(TAG, progress.tag); + values.put(BUCKET, IOUtils.toByteArray(progress.myBucket)); + values.put(OBJECT_KEY, progress.objectKey); + values.put(FOLDER, progress.folder); + values.put(FILE_PATH, progress.filePath); + values.put(FILE_NAME, progress.fileName); + values.put(FRACTION, progress.fraction); + values.put(TOTAL_SIZE, progress.totalSize); + values.put(CURRENT_SIZE, progress.currentSize); + values.put(STATUS, progress.status); + values.put(DATE, progress.date); + values.put(RECORDER_BEAN, progress.recorderBean); + values.put(EXTRA1, IOUtils.toByteArray(progress.extra1)); + values.put(EXTRA2, IOUtils.toByteArray(progress.extra2)); + values.put(EXTRA3, IOUtils.toByteArray(progress.extra3)); + return values; + } + + public static ContentValues buildUpdateContentValues(Progress progress) { + ContentValues values = new ContentValues(); + values.put(FRACTION, progress.fraction); + values.put(TOTAL_SIZE, progress.totalSize); + values.put(CURRENT_SIZE, progress.currentSize); + values.put(STATUS, progress.status); + values.put(DATE, progress.date); + values.put(RECORDER_BEAN, progress.recorderBean); + return values; + } + + public static Progress parseCursorToBean(Cursor cursor) { + Progress progress = new Progress(); + progress.tag = cursor.getString(cursor.getColumnIndex(Progress.TAG)); + progress.myBucket = (MyBucket) IOUtils.toObject(cursor.getBlob(cursor.getColumnIndex(Progress.BUCKET))); + progress.objectKey = cursor.getString(cursor.getColumnIndex(Progress.OBJECT_KEY)); + progress.folder = cursor.getString(cursor.getColumnIndex(Progress.FOLDER)); + progress.filePath = cursor.getString(cursor.getColumnIndex(Progress.FILE_PATH)); + progress.fileName = cursor.getString(cursor.getColumnIndex(Progress.FILE_NAME)); + progress.fraction = cursor.getFloat(cursor.getColumnIndex(Progress.FRACTION)); + progress.totalSize = cursor.getLong(cursor.getColumnIndex(Progress.TOTAL_SIZE)); + progress.currentSize = cursor.getLong(cursor.getColumnIndex(Progress.CURRENT_SIZE)); + progress.status = cursor.getInt(cursor.getColumnIndex(Progress.STATUS)); + progress.date = cursor.getLong(cursor.getColumnIndex(Progress.DATE)); + progress.extra1 = (Serializable) IOUtils.toObject(cursor.getBlob(cursor.getColumnIndex(Progress.EXTRA1))); + progress.extra2 = (Serializable) IOUtils.toObject(cursor.getBlob(cursor.getColumnIndex(Progress.EXTRA2))); + progress.extra3 = (Serializable) IOUtils.toObject(cursor.getBlob(cursor.getColumnIndex(Progress.EXTRA3))); + progress.recorderBean = cursor.getBlob(cursor.getColumnIndex(Progress.RECORDER_BEAN)); + return progress; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Progress progress = (Progress) o; + return tag != null ? tag.equals(progress.tag) : progress.tag == null; + + } + + @Override + public int hashCode() { + return tag != null ? tag.hashCode() : 0; + } + + @Override + public String toString() { + return "Progress{" + + "tag='" + tag + '\'' + + ", bucket=" + myBucket + + ", objectKey='" + objectKey + '\'' + + ", folder='" + folder + '\'' + + ", filePath='" + filePath + '\'' + + ", fileName='" + fileName + '\'' + + ", fraction=" + fraction + + ", totalSize=" + totalSize + + ", currentSize=" + currentSize + + ", speed=" + speed + + ", status=" + status + + ", date=" + date + + ", extra1=" + extra1 + + ", extra2=" + extra2 + + ", extra3=" + extra3 + + ", recorderBean=" + Arrays.toString(recorderBean) + + '}'; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/TableEntity.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/TableEntity.java new file mode 100644 index 0000000..a904110 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/TableEntity.java @@ -0,0 +1,86 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.db; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by chengww on 2018/12/28. + */ +public class TableEntity { + + public String tableName; + private List list; + + public TableEntity(String tableName) { + this.tableName = tableName; + list = new ArrayList<>(); + } + + public TableEntity addColumn(ColumnEntity columnEntity) { + list.add(columnEntity); + return this; + } + + public String buildTableString() { + StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS "); + sb.append(tableName).append('('); + for (ColumnEntity entity : list) { + if (entity.compositePrimaryKey != null) { + sb.append("PRIMARY KEY ("); + for (String primaryKey : entity.compositePrimaryKey) { + sb.append(primaryKey).append(","); + } + sb.deleteCharAt(sb.length() - 1); + sb.append(")"); + } else { + sb.append(entity.columnName).append(" ").append(entity.columnType); + if (entity.isNotNull) { + sb.append(" NOT NULL"); + } + if (entity.isPrimary) { + sb.append(" PRIMARY KEY"); + } + if (entity.isAutoincrement) { + sb.append(" AUTOINCREMENT"); + } + sb.append(","); + } + } + if (sb.toString().endsWith(",")) { + sb.deleteCharAt(sb.length() - 1); + } + sb.append(')'); + return sb.toString(); + } + + public String getColumnName(int columnIndex) { + return list.get(columnIndex).columnName; + } + + public int getColumnCount() { + return list.size(); + } + + public int getColumnIndex(String columnName) { + int columnCount = getColumnCount(); + for (int i = 0; i < columnCount; i++) { + if (list.get(i).columnName.equals(columnName)) return i; + } + return -1; + } +} \ No newline at end of file diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/UploadTaskManager.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/UploadTaskManager.java new file mode 100644 index 0000000..81efd4a --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/UploadTaskManager.java @@ -0,0 +1,90 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.db; + +import android.content.ContentValues; +import android.database.Cursor; + +import java.util.List; + +/** + * Created by chengww on 2018/12/28. + */ +public class UploadTaskManager extends BaseDao { + + private UploadTaskManager() { + super(new DBHelper()); + } + + public static UploadTaskManager getInstance() { + return UploadManagerHolder.instance; + } + + private static class UploadManagerHolder { + private static final UploadTaskManager instance = new UploadTaskManager(); + } + + @Override + public Progress parseCursorToBean(Cursor cursor) { + return Progress.parseCursorToBean(cursor); + } + + @Override + public ContentValues getContentValues(Progress progress) { + return Progress.buildContentValues(progress); + } + + @Override + public String getTableName() { + return DBHelper.TABLE_UPLOAD; + } + + @Override + public void unInit() { + } + + public Progress get(String tag) { + return queryOne(Progress.TAG + "=?", new String[]{tag}); + } + + public void delete(String taskKey) { + delete(Progress.TAG + "=?", new String[]{taskKey}); + } + + public boolean update(Progress progress) { + return update(progress, Progress.TAG + "=?", new String[]{progress.tag}); + } + + public boolean update(ContentValues contentValues, String tag) { + return update(contentValues, Progress.TAG + "=?", new String[]{tag}); + } + + public List getAll() { + return query(null, null, null, null, null, Progress.DATE + " ASC", null); + } + + public List getFinished() { + return query(null, "status=?", new String[]{Progress.FINISH + ""}, null, null, Progress.DATE + " ASC", null); + } + + public List getUploading() { + return query(null, "status not in(?)", new String[]{Progress.FINISH + ""}, null, null, Progress.DATE + " ASC", null); + } + + public boolean clear() { + return deleteAll(); + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/exception/TaskException.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/exception/TaskException.java new file mode 100644 index 0000000..20e0417 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/exception/TaskException.java @@ -0,0 +1,179 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.exception; + +import com.chengww.qingstor_sdk_android.utils.ResUtils; +import com.qingstor.sdk.constants.QSConstant; +import com.qingstor.sdk.exception.QSException; +import com.qingstor.sdk.model.OutputModel; + +import java.io.IOException; + +/** + * Created by chengww on 2018/12/28. + */ +public class TaskException extends Exception { + + private int statusCode; //HTTP status code + private String code; + private String message; //HTTP status message + private String requestID; + private String helpUrl; + private String i18nHint; + + + public TaskException(String message) { + super(message); + this.message = message; + i18nHint = message; + } + + public TaskException(OutputModel outputModel) { + super(outputModel == null ? null : outputModel.getMessage()); + generateErrorMessage(outputModel); + } + + public TaskException(QSException e) { + super(e == null ? null : e.getMessage()); + if (e == null) return; + statusCode = 1000; + code = "network_error"; + message = e.getMessage(); + i18nHint = ResUtils.string(code); + } + + private void generateErrorMessage(OutputModel outputModel) { + if (outputModel == null) return; + statusCode = outputModel.getStatueCode(); + code = outputModel.getCode(); + if (statusCode == QSConstant.REQUEST_ERROR_CODE || statusCode == 0) + code = "network_error"; + message = outputModel.getMessage(); + requestID = outputModel.getRequestId(); + helpUrl = outputModel.getUrl(); + i18nHint = ResUtils.string(code); + } + + @Override + public String getMessage() { + return toString(); + } + + public static TaskException BREAKPOINT_NOT_EXIST() { + TaskException exception = new TaskException("Breakpoint file does not exist!"); + exception.setStatusCode(2000); + exception.setCode("breakpoint_file_does_not_exist"); + exception.setI18nHint(ResUtils.string("breakpoint_file_does_not_exist")); + return exception; + } + + public static TaskException BREAKPOINT_EXPIRED() { + TaskException exception = new TaskException("Breakpoint file has expired!"); + exception.setStatusCode(2001); + exception.setCode("breakpoint_file_expired"); + exception.setI18nHint(ResUtils.string("breakpoint_file_expired")); + return exception; + } + + public static TaskException FILE_INVALID(String message) { + TaskException exception = new TaskException(message); + exception.setStatusCode(2002); + exception.setCode("file_invalid"); + exception.setI18nHint(ResUtils.string("file_invalid")); + return exception; + } + + public static TaskException NOT_AVAILABLE() { + TaskException exception = new TaskException("SDCard isn't available, please check SD card and permission: WRITE_EXTERNAL_STORAGE, and you must pay attention to Android6.0 RunTime Permissions!"); + exception.setStatusCode(2003); + exception.setCode("write_permission_defined"); + exception.setI18nHint(ResUtils.string("write_permission_defined")); + return exception; + } + + public static TaskException UNKNOWN() { + String message = "An unknown error occurred when download"; + TaskException exception = new TaskException(message); + exception.setStatusCode(3000); + exception.setCode("unknown_error"); + exception.setI18nHint(ResUtils.string("unknown_error")); + return exception; + } + + public static TaskException IO_EXCEPTION(IOException e) { + TaskException exception = new TaskException(e.getMessage()); + exception.setStatusCode(2004); + exception.setCode("io_exception"); + exception.setI18nHint(ResUtils.string("io_exception")); + return exception; + } + + + @Override + public String toString() { + return "TaskException{" + + "statusCode=" + statusCode + + ", code='" + code + '\'' + + ", message='" + message + '\'' + + ", requestID='" + requestID + '\'' + + ", helpUrl='" + helpUrl + '\'' + + '}'; + } + + public int getStatusCode() { + return statusCode; + } + + public void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getRequestID() { + return requestID; + } + + public void setRequestID(String requestID) { + this.requestID = requestID; + } + + public String getHelpUrl() { + return helpUrl; + } + + public void setHelpUrl(String helpUrl) { + this.helpUrl = helpUrl; + } + + public String getI18nHint() { + return i18nHint; + } + + public void setI18nHint(String i18nHint) { + this.i18nHint = i18nHint; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/DownloadListener.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/DownloadListener.java new file mode 100644 index 0000000..d3b55e5 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/DownloadListener.java @@ -0,0 +1,30 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.listener; + +import java.io.File; + +/** + * Created by chengww on 2018/12/28. + */ +public abstract class DownloadListener implements ProgressListener { + + public final Object tag; + + public DownloadListener(Object tag) { + this.tag = tag; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/ProgressListener.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/ProgressListener.java new file mode 100644 index 0000000..bc6d821 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/ProgressListener.java @@ -0,0 +1,33 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.listener; + +import com.chengww.qingstor_sdk_android.db.Progress; + +/** + * Created by chengww on 2018/12/28. + */ +public interface ProgressListener { + void onStart(Progress progress); + + void onProgress(Progress progress); + + void onError(Progress progress); + + void onFinish(T t, Progress progress); + + void onRemove(Progress progress); +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/UploadListener.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/UploadListener.java new file mode 100644 index 0000000..2346bf5 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/listener/UploadListener.java @@ -0,0 +1,28 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.listener; + +/** + * Created by chengww on 2018/12/28. + */ +public abstract class UploadListener implements ProgressListener { + + public final Object tag; + + public UploadListener(Object tag) { + this.tag = tag; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/recorder/DBBeanRecorder.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/recorder/DBBeanRecorder.java new file mode 100644 index 0000000..360920d --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/recorder/DBBeanRecorder.java @@ -0,0 +1,45 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.recorder; + +import com.chengww.qingstor_sdk_android.db.Progress; +import com.qingstor.sdk.upload.Recorder; + +/** + * Created by chengww on 2018/12/28. + */ +public class DBBeanRecorder implements Recorder { + private Progress progress; + + public DBBeanRecorder(Progress progress) { + this.progress = progress; + } + + @Override + public void set(String key, byte[] data) { + progress.recorderBean = data; + } + + @Override + public byte[] get(String key) { + return progress.recorderBean; + } + + @Override + public void del(String key) { + progress.recorderBean = null; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/DownloadTask.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/DownloadTask.java new file mode 100644 index 0000000..2610099 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/DownloadTask.java @@ -0,0 +1,454 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.task; + +import android.content.ContentValues; +import android.text.TextUtils; +import android.util.Log; + +import com.chengww.qingstor_sdk_android.QingstorHelper; +import com.chengww.qingstor_sdk_android.db.DownloadTaskManager; +import com.chengww.qingstor_sdk_android.db.Progress; +import com.chengww.qingstor_sdk_android.exception.TaskException; +import com.chengww.qingstor_sdk_android.listener.DownloadListener; +import com.chengww.qingstor_sdk_android.utils.IOUtils; +import com.qingstor.sdk.exception.QSException; +import com.qingstor.sdk.service.Bucket; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Created by chengww on 2018/12/28. + */ +public class DownloadTask implements Comparable, Runnable { + + private static final int BUFFER_SIZE = 1024 * 8; + + public Progress progress; + public Map listeners; + private ThreadPoolExecutor executor; + private PriorityRunnable priorityRunnable; + + public DownloadTask(String tag, Bucket bucket, String objectKey) { + IOUtils.checkNotNull(tag, "tag == null"); + IOUtils.checkNotNull(bucket, "bucket == null"); + IOUtils.checkNotNull(objectKey, "objectKey == null"); + progress = new Progress(); + progress.tag = tag; + progress.folder = Downloader.getInstance().getFolder(); + progress.myBucket = IOUtils.getMyBucket(bucket); + progress.status = Progress.NONE; + progress.totalSize = -1; + progress.objectKey = objectKey; + + init(); + } + + public DownloadTask(Progress progress) { + IOUtils.checkNotNull(progress, "progress == null"); + this.progress = progress; + init(); + } + + private void init() { + executor = Downloader.getInstance().getThreadPool().getExecutor(); + listeners = new HashMap<>(); + } + + public DownloadTask folder(String folder) { + if (folder != null && !TextUtils.isEmpty(folder.trim())) { + progress.folder = folder; + } else { + Log.w(Downloader.TAG, "folder is null, ignored!"); + } + return this; + } + + public DownloadTask fileName(String fileName) { + if (fileName != null && !TextUtils.isEmpty(fileName.trim())) { + progress.fileName = fileName; + } else { + Log.w(Downloader.TAG, "fileName is null, ignored!"); + } + return this; + } + + public DownloadTask extra1(Serializable extra1) { + progress.extra1 = extra1; + return this; + } + + public DownloadTask extra2(Serializable extra2) { + progress.extra2 = extra2; + return this; + } + + public DownloadTask extra3(Serializable extra3) { + progress.extra3 = extra3; + return this; + } + + public DownloadTask save() { + if (TextUtils.isEmpty(progress.fileName)) { + progress.fileName = IOUtils.getFileName(progress.objectKey); + } + + if (!TextUtils.isEmpty(progress.folder) && !TextUtils.isEmpty(progress.fileName)) { + progress.filePath = new File(progress.folder, progress.fileName).getAbsolutePath(); + } + DownloadTaskManager.getInstance().replace(progress); + return this; + } + + public DownloadTask register(DownloadListener listener) { + if (listener != null) { + listeners.put(listener.tag, listener); + } + return this; + } + + public void unRegister(DownloadListener listener) { + IOUtils.checkNotNull(listener, "listener == null"); + listeners.remove(listener.tag); + } + + public void unRegister(String tag) { + IOUtils.checkNotNull(tag, "tag == null"); + listeners.remove(tag); + } + + public void start() { + if (Downloader.getInstance().getTask(progress.tag) == null || DownloadTaskManager.getInstance().get(progress.tag) == null) { + throw new IllegalStateException("you must call DownloadTask#save() before DownloadTask#start()!"); + } + if (progress.status == Progress.NONE || progress.status == Progress.PAUSE || progress.status == Progress.ERROR) { + postOnStart(progress); + postWaiting(progress); + priorityRunnable = new PriorityRunnable(this); + executor.execute(priorityRunnable); + } else if (progress.status == Progress.FINISH) { + if (progress.filePath == null) { + postOnError(progress, TaskException.FILE_INVALID("The file of the task with tag:" + progress.tag + " may be invalid or damaged, please call the method restart() to download again!")); + } else { + File file = new File(progress.filePath); + if (file.exists() && file.length() == progress.totalSize) { + postOnFinish(progress, new File(progress.filePath)); + } else { + postOnError(progress, TaskException.FILE_INVALID("the file " + progress.filePath + " may be invalid or damaged, please call the method restart() to download again!")); + } + } + } else { + Log.w(Downloader.TAG, "the task with tag " + progress.tag + " is already in the download queue, current task status is " + progress.status); + } + } + + public void restart() { + pause(); + IOUtils.delFileOrFolder(progress.filePath); + progress.status = Progress.NONE; + progress.currentSize = 0; + progress.fraction = 0; + progress.speed = 0; + DownloadTaskManager.getInstance().replace(progress); + start(); + } + + /** + * 暂停的方法 + */ + public void pause() { + executor.remove(priorityRunnable); + if (progress.status == Progress.WAITING) { + postPause(progress); + } else if (progress.status == Progress.LOADING) { + progress.speed = 0; + progress.status = Progress.PAUSE; + } else { + Log.w(Downloader.TAG, "only the task with status WAITING(1) or LOADING(2) can pause, current status is " + progress.status); + } + } + + /** + * 删除一个任务,会删除下载文件 + */ + public void remove() { + remove(false); + } + + /** + * 删除一个任务,会删除下载文件 + */ + public DownloadTask remove(boolean isDeleteFile) { + pause(); + if (isDeleteFile) IOUtils.delFileOrFolder(progress.filePath); + DownloadTaskManager.getInstance().delete(progress.tag); + DownloadTask task = Downloader.getInstance().removeTask(progress.tag); + postOnRemove(progress); + return task; + } + + @Override + public void run() { + // Check breakpoint + long startPosition = progress.currentSize; + if (startPosition < 0) { + postOnError(progress, TaskException.BREAKPOINT_EXPIRED()); + return; + } + if (startPosition > 0) { + if (!TextUtils.isEmpty(progress.filePath)) { + File file = new File(progress.filePath); + if (!file.exists()) { + postOnError(progress, TaskException.BREAKPOINT_NOT_EXIST()); + return; + } + } + } + + //request network from startPosition + Bucket.GetObjectInput input = new Bucket.GetObjectInput(); + input.setRange("bytes=" + startPosition + "-"); + InputStream byteStream; + try { + Bucket.GetObjectOutput out = IOUtils.getBucket(progress.myBucket).getObject(progress.objectKey, input); + // Check network data + byteStream = out.getBodyInputStream(); + if (out.getStatueCode() >= 200 && out.getStatueCode() < 400) { + if (byteStream != null) { + if (progress.totalSize == -1 && out.getContentLength() != null) { + progress.totalSize = out.getContentLength(); + } + + // Create filename + String fileName = progress.fileName; + if (TextUtils.isEmpty(fileName)) { + fileName = IOUtils.getFileName(progress.objectKey); + progress.fileName = fileName; + } + if (!IOUtils.createFolder(progress.folder)) { + postOnError(progress, TaskException.NOT_AVAILABLE()); + return; + } + + // Create and check file + File file; + if (TextUtils.isEmpty(progress.filePath)) { + file = new File(progress.folder, fileName); + progress.filePath = file.getAbsolutePath(); + } else { + file = new File(progress.filePath); + } + if (startPosition > 0 && !file.exists()) { + postOnError(progress, TaskException.BREAKPOINT_EXPIRED()); + return; + } + if (startPosition > progress.totalSize) { + postOnError(progress, TaskException.BREAKPOINT_EXPIRED()); + return; + } + if (startPosition == 0 && file.exists()) { + IOUtils.delFileOrFolder(file); + } + if (startPosition == progress.totalSize && startPosition > 0) { + if (file.exists() && startPosition == file.length()) { + postOnFinish(progress, file); + return; + } else { + postOnError(progress, TaskException.BREAKPOINT_EXPIRED()); + return; + } + } + + // Start downloading + RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw"); + randomAccessFile.seek(startPosition); + progress.currentSize = startPosition; + + DownloadTaskManager.getInstance().replace(progress); + download(byteStream, randomAccessFile, progress); + + // Check finish status + if (progress.status == Progress.PAUSE) { + postPause(progress); + } else if (progress.status == Progress.LOADING) { + if (file.length() == progress.totalSize) { + postOnFinish(progress, file); + } else { + postOnError(progress, TaskException.BREAKPOINT_EXPIRED()); + } + } else { + postOnError(progress, TaskException.UNKNOWN()); + } + } else { + postOnError(progress, new TaskException("BodyInputStream is null, skipped.")); + } + } else { + postOnError(progress, new TaskException(out)); + } + + } catch (QSException e) { + postOnError(progress, new TaskException(e)); + } catch (IOException e) { + postOnError(progress, TaskException.IO_EXCEPTION(e)); + } + + } + + /** + * 执行文件下载 + */ + private void download(InputStream input, RandomAccessFile out, Progress progress) throws IOException { + if (input == null || out == null) return; + + progress.status = Progress.LOADING; + byte[] buffer = new byte[BUFFER_SIZE]; + BufferedInputStream in = new BufferedInputStream(input, BUFFER_SIZE); + int len; + try { + while ((len = in.read(buffer, 0, BUFFER_SIZE)) != -1 && progress.status == Progress.LOADING) { + out.write(buffer, 0, len); + + Progress.changeProgress(progress, len, progress.totalSize, new Progress.Action() { + @Override + public void call(Progress progress) { + postLoading(progress); + } + }); + } + } finally { + IOUtils.closeQuietly(out); + IOUtils.closeQuietly(in); + IOUtils.closeQuietly(input); + } + } + + private void postOnStart(final Progress progress) { + progress.speed = 0; + progress.status = Progress.NONE; + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (DownloadListener listener : listeners.values()) { + listener.onStart(progress); + } + } + }); + } + + private void postWaiting(final Progress progress) { + progress.speed = 0; + progress.status = Progress.WAITING; + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (DownloadListener listener : listeners.values()) { + listener.onProgress(progress); + } + } + }); + } + + private void postPause(final Progress progress) { + progress.speed = 0; + progress.status = Progress.PAUSE; + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (DownloadListener listener : listeners.values()) { + listener.onProgress(progress); + } + } + }); + } + + private void postLoading(final Progress progress) { + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (DownloadListener listener : listeners.values()) { + listener.onProgress(progress); + } + } + }); + } + + private void postOnError(final Progress progress, final TaskException throwable) { + progress.speed = 0; + progress.status = Progress.ERROR; + progress.exception = throwable; + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (DownloadListener listener : listeners.values()) { + listener.onProgress(progress); + listener.onError(progress); + } + } + }); + } + + private void postOnFinish(final Progress progress, final File file) { + progress.speed = 0; + progress.fraction = 1.0f; + progress.status = Progress.FINISH; + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (DownloadListener listener : listeners.values()) { + listener.onProgress(progress); + listener.onFinish(file, progress); + } + } + }); + } + + private void postOnRemove(final Progress progress) { + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (DownloadListener listener : listeners.values()) { + listener.onRemove(progress); + } + listeners.clear(); + } + }); + } + + private void updateDatabase(Progress progress) { + ContentValues contentValues = Progress.buildUpdateContentValues(progress); + DownloadTaskManager.getInstance().update(contentValues, progress.tag); + } + + @Override + public int compareTo(Object o) { + return 0; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/DownloadThreadPool.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/DownloadThreadPool.java new file mode 100644 index 0000000..9054925 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/DownloadThreadPool.java @@ -0,0 +1,65 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.task; + +import java.util.concurrent.Executors; +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Created by chengww on 2018/12/28. + */ +public class DownloadThreadPool { + private static final int MAX_POOL_SIZE = 5; + private static final int KEEP_ALIVE_TIME = 1; + private static final TimeUnit UNIT = TimeUnit.HOURS; + private int corePoolSize = 3; + private XExecutor executor; + + public XExecutor getExecutor() { + if (executor == null) { + synchronized (DownloadThreadPool.class) { + if (executor == null) { + executor = new XExecutor(corePoolSize, MAX_POOL_SIZE, KEEP_ALIVE_TIME, UNIT, + new PriorityBlockingQueue(), + Executors.defaultThreadFactory(), + new ThreadPoolExecutor.AbortPolicy()); + } + } + } + return executor; + } + + /** Must set this before first execute. corePoolSize = 1 - 5 */ + public void setCorePoolSize(int corePoolSize) { + if (corePoolSize <= 0) corePoolSize = 1; + if (corePoolSize > MAX_POOL_SIZE) corePoolSize = MAX_POOL_SIZE; + this.corePoolSize = corePoolSize; + } + + public void execute(Runnable runnable) { + if (runnable != null) { + getExecutor().execute(runnable); + } + } + + public void remove(Runnable runnable) { + if (runnable != null) { + getExecutor().remove(runnable); + } + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/Downloader.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/Downloader.java new file mode 100644 index 0000000..c7ccdaf --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/Downloader.java @@ -0,0 +1,213 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.task; + +import android.os.Environment; +import android.util.Log; + +import com.chengww.qingstor_sdk_android.db.DownloadTaskManager; +import com.chengww.qingstor_sdk_android.db.Progress; +import com.chengww.qingstor_sdk_android.utils.IOUtils; +import com.qingstor.sdk.service.Bucket; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by chengww on 2018/12/28. + */ +public class Downloader { + public static final String TAG = "Qingstor_Downloader"; + private String folder; + private DownloadThreadPool threadPool; + private ConcurrentHashMap taskMap; + + public static Downloader getInstance() { + return DownloaderHolder.instance; + } + + private static class DownloaderHolder { + private static final Downloader instance = new Downloader(); + } + + private Downloader() { + folder = Environment.getExternalStorageDirectory() + File.separator + "download" + File.separator; + IOUtils.createFolder(folder); + threadPool = new DownloadThreadPool(); + taskMap = new ConcurrentHashMap<>(); + + /* + Check the validity of the data. + Prevent exit during download process, + and state errors caused by no update of state during the second entry. + */ + List taskList = DownloadTaskManager.getInstance().getDownloading(); + for (Progress info : taskList) { + if (info.status == Progress.WAITING || info.status == Progress.LOADING || info.status == Progress.PAUSE) { + info.status = Progress.NONE; + } + } + DownloadTaskManager.getInstance().replace(taskList); + } + + public static DownloadTask request(String tag, Bucket bucket, String objectKey) { + Map taskMap = Downloader.getInstance().getTaskMap(); + DownloadTask task = taskMap.get(tag); + if (task == null) { + task = new DownloadTask(tag, bucket, objectKey); + taskMap.put(tag, task); + } + return task; + } + + public static DownloadTask restore(Progress progress) { + Map taskMap = Downloader.getInstance().getTaskMap(); + DownloadTask task = taskMap.get(progress.tag); + if (task == null) { + task = new DownloadTask(progress); + taskMap.put(progress.tag, task); + } + return task; + } + + public static List restore(List progressList) { + Map taskMap = Downloader.getInstance().getTaskMap(); + List tasks = new ArrayList<>(); + for (Progress progress : progressList) { + DownloadTask task = taskMap.get(progress.tag); + if (task == null) { + task = new DownloadTask(progress); + taskMap.put(progress.tag, task); + } + tasks.add(task); + } + return tasks; + } + + public void startAll() { + for (Map.Entry entry : taskMap.entrySet()) { + DownloadTask task = entry.getValue(); + if (task == null) { + Log.w(TAG, "Can't find task with tag = " + entry.getKey()); + continue; + } + task.start(); + } + } + + /** 暂停全部任务 */ + public void pauseAll() { + // Stop unstarted tasks first + for (Map.Entry entry : taskMap.entrySet()) { + DownloadTask task = entry.getValue(); + if (task == null) { + Log.w(TAG, "Can't find task with tag = " + entry.getKey()); + continue; + } + if (task.progress.status != Progress.LOADING) { + task.pause(); + } + } + // Then stop ongoing tasks + for (Map.Entry entry : taskMap.entrySet()) { + DownloadTask task = entry.getValue(); + if (task == null) { + Log.w(TAG, "Can't find task with tag = " + entry.getKey()); + continue; + } + if (task.progress.status == Progress.LOADING) { + task.pause(); + } + } + } + + public void removeAll() { + removeAll(false); + } + + /** + * Delete all tasks + * 删除所有任务 + * + * @param isDeleteFile Whether to delete files when deleting tasks 删除任务时是否删除文件 + */ + public void removeAll(boolean isDeleteFile) { + Map map = new HashMap<>(taskMap); + // Delete unstarted tasks first + for (Map.Entry entry : map.entrySet()) { + DownloadTask task = entry.getValue(); + if (task == null) { + Log.w(TAG, "Can't find task with tag = " + entry.getKey()); + continue; + } + if (task.progress.status != Progress.LOADING) { + task.remove(isDeleteFile); + } + } + // Then delete ongoing tasks + for (Map.Entry entry : map.entrySet()) { + DownloadTask task = entry.getValue(); + if (task == null) { + Log.w(TAG, "Can't find task with tag = " + entry.getKey()); + continue; + } + if (task.progress.status == Progress.LOADING) { + task.remove(isDeleteFile); + } + } + } + + public String getFolder() { + return folder; + } + + public Downloader setFolder(String folder) { + this.folder = folder; + return this; + } + + public DownloadThreadPool getThreadPool() { + return threadPool; + } + + public Map getTaskMap() { + return taskMap; + } + + public DownloadTask getTask(String tag) { + return taskMap.get(tag); + } + + public boolean hasTask(String tag) { + return taskMap.containsKey(tag); + } + + public DownloadTask removeTask(String tag) { + return taskMap.remove(tag); + } + + public void addOnAllTaskEndListener(XExecutor.OnAllTaskEndListener listener) { + threadPool.getExecutor().addOnAllTaskEndListener(listener); + } + + public void removeOnAllTaskEndListener(XExecutor.OnAllTaskEndListener listener) { + threadPool.getExecutor().removeOnAllTaskEndListener(listener); + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/MyCancellationHandler.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/MyCancellationHandler.java new file mode 100644 index 0000000..89d14c5 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/MyCancellationHandler.java @@ -0,0 +1,19 @@ +package com.chengww.qingstor_sdk_android.task; + +import com.qingstor.sdk.request.CancellationHandler; + +/** + * Created by chengww on 2019/3/5. + */ +public class MyCancellationHandler implements CancellationHandler { + private boolean paused; + + @Override + public boolean isCancelled() { + return paused; + } + + public void setPaused(boolean paused) { + this.paused = paused; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityBlockingQueue.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityBlockingQueue.java new file mode 100644 index 0000000..5dedeed --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityBlockingQueue.java @@ -0,0 +1,608 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.task; + +import java.io.Serializable; +import java.util.AbstractQueue; +import java.util.Collection; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.ReentrantLock; + +/** + * Created by chengww on 2019/3/4. + */ +public class PriorityBlockingQueue extends AbstractQueue implements BlockingQueue, Serializable { + + /** + * The capacity bound, or Integer.MAX_VALUE if none + */ + private final int capacity; + + /** + * Current number of elements + */ + private final AtomicInteger count = new AtomicInteger(); + + /** + * Head of linked list. + * Invariant: head.item == null + */ + transient Node head; + + /** + * Tail of linked list. + * Invariant: last.next == null + */ + private transient Node last; + + /** + * Lock held by take, poll, etc + */ + private final ReentrantLock takeLock = new ReentrantLock(); + + /** + * Wait queue for waiting takes + */ + private final Condition notEmpty = takeLock.newCondition(); + + /** + * Lock held by put, offer, etc + */ + private final ReentrantLock putLock = new ReentrantLock(); + + /** + * Wait queue for waiting puts + */ + private final Condition notFull = putLock.newCondition(); + + /** + * Signals a waiting take. Called only from put/offer (which do not + * otherwise ordinarily lock takeLock.) + */ + private void signalNotEmpty() { + final ReentrantLock takeLock = this.takeLock; + takeLock.lock(); + try { + notEmpty.signal(); + } finally { + takeLock.unlock(); + } + } + + /** + * Signals a waiting put. Called only from take/poll. + */ + private void signalNotFull() { + final ReentrantLock putLock = this.putLock; + putLock.lock(); + try { + notFull.signal(); + } finally { + putLock.unlock(); + } + } + + private synchronized E opQueue(Node node) { + if (node == null) { + return _dequeue(); + } else { + _enqueue(node); + return null; + } + } + + // only invoke in opQueue + private void _enqueue(Node node) { + boolean added = false; + + Node curr = head; + Node temp = null; + + while (curr.next != null) { + temp = curr.next; + if (temp.getPriority() < node.getPriority()) { + curr.next = node; + node.next = temp; + added = true; + break; + } + curr = curr.next; + } + + if (!added) { + last = last.next = node; + } + } + + // only invoke in opQueue + private E _dequeue() { + // assert takeLock.isHeldByCurrentThread(); + // assert head.item == null; + Node h = head; + Node first = h.next; + h.next = h; // help GC + head = first; + E x = first.getValue(); + first.setValue(null); + return x; + } + + /** + * Locks to prevent both puts and takes. + */ + void fullyLock() { + putLock.lock(); + takeLock.lock(); + } + + /** + * Unlocks to allow both puts and takes. + */ + void fullyUnlock() { + takeLock.unlock(); + putLock.unlock(); + } + + public PriorityBlockingQueue() { + this(Integer.MAX_VALUE); + } + + public PriorityBlockingQueue(int capacity) { + if (capacity <= 0) throw new IllegalArgumentException(); + this.capacity = capacity; + last = head = new Node(null); + } + + public PriorityBlockingQueue(Collection c) { + this(Integer.MAX_VALUE); + final ReentrantLock putLock = this.putLock; + putLock.lock(); // Never contended, but necessary for visibility + try { + int n = 0; + for (E e : c) { + if (e == null) throw new NullPointerException(); + if (n == capacity) throw new IllegalStateException("Queue full"); + opQueue(new Node(e)); + ++n; + } + count.set(n); + } finally { + putLock.unlock(); + } + } + + public int size() { + return count.get(); + } + + public int remainingCapacity() { + return capacity - count.get(); + } + + public void put(E e) throws InterruptedException { + if (e == null) throw new NullPointerException(); + // Note: convention in all put/take/etc is to preset local var + // holding count negative to indicate failure unless set. + int c = -1; + Node node = new Node(e); + final ReentrantLock putLock = this.putLock; + final AtomicInteger count = this.count; + putLock.lockInterruptibly(); + try { + while (count.get() == capacity) { + notFull.await(); + } + opQueue(node); + c = count.getAndIncrement(); + if (c + 1 < capacity) notFull.signal(); + } finally { + putLock.unlock(); + } + if (c == 0) signalNotEmpty(); + } + + public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException { + + if (e == null) throw new NullPointerException(); + long nanos = unit.toNanos(timeout); + int c = -1; + final ReentrantLock putLock = this.putLock; + final AtomicInteger count = this.count; + putLock.lockInterruptibly(); + try { + while (count.get() == capacity) { + if (nanos <= 0) return false; + nanos = notFull.awaitNanos(nanos); + } + opQueue(new Node(e)); + c = count.getAndIncrement(); + if (c + 1 < capacity) notFull.signal(); + } finally { + putLock.unlock(); + } + if (c == 0) signalNotEmpty(); + return true; + } + + public boolean offer(E e) { + if (e == null) throw new NullPointerException(); + final AtomicInteger count = this.count; + if (count.get() == capacity) return false; + int c = -1; + Node node = new Node(e); + final ReentrantLock putLock = this.putLock; + putLock.lock(); + try { + if (count.get() < capacity) { + opQueue(node); + c = count.getAndIncrement(); + if (c + 1 < capacity) notFull.signal(); + } + } finally { + putLock.unlock(); + } + if (c == 0) signalNotEmpty(); + return c >= 0; + } + + public E take() throws InterruptedException { + E x; + int c = -1; + final AtomicInteger count = this.count; + final ReentrantLock takeLock = this.takeLock; + takeLock.lockInterruptibly(); + try { + while (count.get() == 0) { + notEmpty.await(); + } + x = opQueue(null); + c = count.getAndDecrement(); + if (c > 1) notEmpty.signal(); + } finally { + takeLock.unlock(); + } + if (c == capacity) signalNotFull(); + return x; + } + + public E poll(long timeout, TimeUnit unit) throws InterruptedException { + E x = null; + int c = -1; + long nanos = unit.toNanos(timeout); + final AtomicInteger count = this.count; + final ReentrantLock takeLock = this.takeLock; + takeLock.lockInterruptibly(); + try { + while (count.get() == 0) { + if (nanos <= 0) return null; + nanos = notEmpty.awaitNanos(nanos); + } + x = opQueue(null); + c = count.getAndDecrement(); + if (c > 1) notEmpty.signal(); + } finally { + takeLock.unlock(); + } + if (c == capacity) signalNotFull(); + return x; + } + + public E poll() { + final AtomicInteger count = this.count; + if (count.get() == 0) return null; + E x = null; + int c = -1; + final ReentrantLock takeLock = this.takeLock; + takeLock.lock(); + try { + if (count.get() > 0) { + x = opQueue(null); + c = count.getAndDecrement(); + if (c > 1) notEmpty.signal(); + } + } finally { + takeLock.unlock(); + } + if (c == capacity) signalNotFull(); + return x; + } + + public E peek() { + if (count.get() == 0) return null; + final ReentrantLock takeLock = this.takeLock; + takeLock.lock(); + try { + Node first = head.next; + if (first == null) return null; + else return first.getValue(); + } finally { + takeLock.unlock(); + } + } + + /** + * Unlinks interior Node p with predecessor trail. + */ + void unlink(Node p, Node trail) { + // assert isFullyLocked(); + // p.next is not changed, to allow iterators that are + // traversing p to maintain their weak-consistency guarantee. + p.setValue(null); + trail.next = p.next; + if (last == p) last = trail; + if (count.getAndDecrement() == capacity) notFull.signal(); + } + + public boolean remove(Object o) { + if (o == null) return false; + fullyLock(); + try { + for (Node trail = head, p = trail.next; p != null; trail = p, p = p.next) { + if (o.equals(p.getValue())) { + unlink(p, trail); + return true; + } + } + return false; + } finally { + fullyUnlock(); + } + } + + public boolean contains(Object o) { + if (o == null) return false; + fullyLock(); + try { + for (Node p = head.next; p != null; p = p.next) + if (o.equals(p.getValue())) return true; + return false; + } finally { + fullyUnlock(); + } + } + + public Object[] toArray() { + fullyLock(); + try { + int size = count.get(); + Object[] a = new Object[size]; + int k = 0; + for (Node p = head.next; p != null; p = p.next) + a[k++] = p.getValue(); + return a; + } finally { + fullyUnlock(); + } + } + + @SuppressWarnings("unchecked") + public T[] toArray(T[] a) { + fullyLock(); + try { + int size = count.get(); + if (a.length < size) a = (T[]) java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size); + + int k = 0; + for (Node p = (Node) head.next; p != null; p = p.next) + a[k++] = (T) p.getValue(); + if (a.length > k) a[k] = null; + return a; + } finally { + fullyUnlock(); + } + } + + public void clear() { + fullyLock(); + try { + for (Node p, h = head; (p = h.next) != null; h = p) { + h.next = h; + p.setValue(null); + } + head = last; + // assert head.item == null && head.next == null; + if (count.getAndSet(0) == capacity) notFull.signal(); + } finally { + fullyUnlock(); + } + } + + public int drainTo(Collection c) { + return drainTo(c, Integer.MAX_VALUE); + } + + public int drainTo(Collection c, int maxElements) { + if (c == null) throw new NullPointerException(); + if (c == this) throw new IllegalArgumentException(); + if (maxElements <= 0) return 0; + boolean signalNotFull = false; + final ReentrantLock takeLock = this.takeLock; + takeLock.lock(); + try { + int n = Math.min(maxElements, count.get()); + // count.query provides visibility to first n Nodes + Node h = head; + int i = 0; + try { + while (i < n) { + Node p = h.next; + c.add(p.getValue()); + p.setValue(null); + h.next = h; + h = p; + ++i; + } + return n; + } finally { + // Restore invariants even if c.add() threw + if (i > 0) { + // assert h.item == null; + head = h; + signalNotFull = (count.getAndAdd(-i) == capacity); + } + } + } finally { + takeLock.unlock(); + if (signalNotFull) signalNotFull(); + } + } + + public Iterator iterator() { + return new Itr(); + } + + private class Itr implements Iterator { + + private Node current; + private Node lastRet; + private E currentElement; + + Itr() { + fullyLock(); + try { + current = head.next; + if (current != null) currentElement = current.getValue(); + } finally { + fullyUnlock(); + } + } + + public boolean hasNext() { + return current != null; + } + + private Node nextNode(Node p) { + for (; ; ) { + Node s = p.next; + if (s == p) return head.next; + if (s == null || s.getValue() != null) return s; + p = s; + } + } + + public E next() { + fullyLock(); + try { + if (current == null) throw new NoSuchElementException(); + E x = currentElement; + lastRet = current; + current = nextNode(current); + currentElement = (current == null) ? null : current.getValue(); + return x; + } finally { + fullyUnlock(); + } + } + + public void remove() { + if (lastRet == null) throw new IllegalStateException(); + fullyLock(); + try { + Node node = lastRet; + lastRet = null; + for (Node trail = head, p = trail.next; p != null; trail = p, p = p.next) { + if (p == node) { + unlink(p, trail); + break; + } + } + } finally { + fullyUnlock(); + } + } + } + + private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { + + fullyLock(); + try { + // Write out any hidden stuff, plus capacity + s.defaultWriteObject(); + + // Write out all elements in the proper order. + for (Node p = head.next; p != null; p = p.next) + s.writeObject(p.getValue()); + + // Use trailing null as sentinel + s.writeObject(null); + } finally { + fullyUnlock(); + } + } + + /** + * Reconstitutes this queue from a stream (that is, deserializes it). + */ + private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { + // Read in capacity, and any hidden stuff + s.defaultReadObject(); + + count.set(0); + last = head = new Node(null); + + // Read in all elements and place in queue + for (; ; ) { + @SuppressWarnings("unchecked") E item = (E) s.readObject(); + if (item == null) break; + add(item); + } + } + + /** + * Linked list node class + */ + class Node { + private boolean valueAsT = false; + private PriorityObject value; + Node next; + + Node(T value) { + setValue(value); + } + + public int getPriority() { + return value.priority; + } + + @SuppressWarnings("unchecked") + public T getValue() { + if (value == null) { + return null; + } else if (valueAsT) { + return (T) value; + } else { + return (T) value.obj; + } + } + + public void setValue(T value) { + if (value == null) { + this.value = null; + } else if (value instanceof PriorityObject) { + this.value = (PriorityObject) value; + this.valueAsT = true; + } else { + this.value = new PriorityObject(0, value); + } + } + } + +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityObject.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityObject.java new file mode 100644 index 0000000..370b0a9 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityObject.java @@ -0,0 +1,30 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.task; + +/** + * Created by chengww on 2019/3/4. + */ +public class PriorityObject { + + public final int priority; + public final E obj; + + public PriorityObject(int priority, E obj) { + this.priority = priority; + this.obj = obj; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityRunnable.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityRunnable.java new file mode 100644 index 0000000..7eadb79 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/PriorityRunnable.java @@ -0,0 +1,36 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.task; + +/** + * Created by chengww on 2019/3/4. + */ +public class PriorityRunnable extends PriorityObject implements Runnable, Comparable { + + public PriorityRunnable(Runnable obj) { + super(0, obj); + } + + @Override + public void run() { + this.obj.run(); + } + + @Override + public int compareTo(Object o) { + return 0; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/UploadTask.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/UploadTask.java new file mode 100644 index 0000000..22d5836 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/UploadTask.java @@ -0,0 +1,318 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.task; + +import android.content.ContentValues; + +import com.chengww.qingstor_sdk_android.QingstorHelper; +import com.chengww.qingstor_sdk_android.db.Progress; +import com.chengww.qingstor_sdk_android.db.UploadTaskManager; +import com.chengww.qingstor_sdk_android.exception.TaskException; +import com.chengww.qingstor_sdk_android.listener.UploadListener; +import com.chengww.qingstor_sdk_android.recorder.DBBeanRecorder; +import com.chengww.qingstor_sdk_android.utils.IOUtils; +import com.qingstor.sdk.constants.QSConstant; +import com.qingstor.sdk.exception.QSException; +import com.qingstor.sdk.model.OutputModel; +import com.qingstor.sdk.request.CancellationHandler; +import com.qingstor.sdk.service.Bucket; +import com.qingstor.sdk.upload.Recorder; +import com.qingstor.sdk.upload.UploadManager; +import com.qingstor.sdk.upload.UploadManagerCallback; +import com.qingstor.sdk.upload.UploadProgressListener; + +import java.io.File; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Created by chengww on 2018/12/28. + */ +public class UploadTask extends UploadManagerCallback implements Runnable, Comparable, UploadProgressListener { + + public Progress progress; + public Map> listeners; + private ThreadPoolExecutor executor; + private Recorder recorder; + private UploadManager manager; + private PriorityRunnable priorityRunnable; + private MyCancellationHandler cancellationHandler; + + public UploadTask(java.lang.String tag, Bucket bucket, java.lang.String objectKey, java.lang.String filePath) { + IOUtils.checkNotNull(tag, "tag == null"); + IOUtils.checkNotNull(bucket, "bucket == null"); + IOUtils.checkNotNull(objectKey, "objectKey == null"); + progress = new Progress(); + progress.tag = tag; + + progress.myBucket = IOUtils.getMyBucket(bucket); + progress.objectKey = objectKey; + progress.status = Progress.NONE; + progress.totalSize = -1; + progress.filePath = filePath; + + init(progress); + } + + + public UploadTask(Progress progress) { + IOUtils.checkNotNull(progress, "progress == null"); + this.progress = progress; + init(progress); + } + + private void init(Progress progress) { + executor = Uploader.getInstance().getThreadPool().getExecutor(); + listeners = new HashMap<>(); + recorder = new DBBeanRecorder(progress); + manager = new UploadManager(IOUtils.getBucket(progress.myBucket), recorder, + this, null, this); + File file = new File(progress.filePath); + if (file.exists()) + progress.fileName = file.getName(); + } + + public UploadTask extra1(Serializable extra1) { + progress.extra1 = extra1; + return this; + } + + public UploadTask extra2(Serializable extra2) { + progress.extra2 = extra2; + return this; + } + + public UploadTask extra3(Serializable extra3) { + progress.extra3 = extra3; + return this; + } + + public UploadTask save() { + UploadTaskManager.getInstance().replace(progress); + return this; + } + + public UploadTask register(UploadListener listener) { + if (listener != null) { + listeners.put(listener.tag, listener); + } + return this; + } + + public void unRegister(UploadListener listener) { + IOUtils.checkNotNull(listener, "listener == null"); + listeners.remove(listener.tag); + } + + public void unRegister(java.lang.String tag) { + IOUtils.checkNotNull(tag, "tag == null"); + listeners.remove(tag); + } + + public UploadTask start() { + if (Uploader.getInstance().getTask(progress.tag) == null || UploadTaskManager.getInstance().get(progress.tag) == null) { + throw new IllegalStateException("you must call UploadTask#save() before UploadTask#start()!"); + } + if (progress.status != Progress.WAITING && progress.status != Progress.LOADING) { + postOnStart(progress); + postWaiting(progress); + priorityRunnable = new PriorityRunnable(this); + executor.execute(priorityRunnable); + } + return this; + } + + public void restart() { + pause(); + progress.status = Progress.NONE; + progress.currentSize = 0; + progress.fraction = 0; + progress.speed = 0; + UploadTaskManager.getInstance().replace(progress); + start(); + } + + public void pause() { + if (progress.status == Progress.WAITING || progress.status == Progress.NONE) { + postPause(progress); + } else if (progress.status == Progress.LOADING) { + progress.speed = 0; + progress.status = Progress.PAUSE; + cancellationHandler.setPaused(true); + postPause(progress); + } + executor.remove(priorityRunnable); + + } + + public UploadTask remove() { + pause(); + UploadTaskManager.getInstance().delete(progress.tag); + //noinspection unchecked + UploadTask task = (UploadTask) Uploader.getInstance().removeTask(progress.tag); + postOnRemove(progress); + return task; + } + + @Override + public void run() { + progress.status = Progress.LOADING; + postLoading(progress); + + try { + cancellationHandler = new MyCancellationHandler(); + manager.setCancellationHandler(cancellationHandler); + manager.put(new File(progress.filePath), progress.objectKey, null, null); + } catch (QSException e) { + postOnError(progress, new TaskException(e)); + } + } + + private void postOnStart(final Progress progress) { + progress.speed = 0; + progress.status = Progress.NONE; + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (UploadListener listener : listeners.values()) { + listener.onStart(progress); + } + } + }); + } + + private void postWaiting(final Progress progress) { + progress.speed = 0; + progress.status = Progress.WAITING; + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (UploadListener listener : listeners.values()) { + listener.onProgress(progress); + } + } + }); + } + + private void postPause(final Progress progress) { + progress.speed = 0; + progress.status = Progress.PAUSE; + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (UploadListener listener : listeners.values()) { + listener.onProgress(progress); + } + } + }); + } + + private void postLoading(final Progress progress) { + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (UploadListener listener : listeners.values()) { + listener.onProgress(progress); + } + } + }); + } + + private void postOnError(final Progress progress, final TaskException throwable) { + progress.speed = 0; + progress.status = Progress.ERROR; + progress.exception = throwable; + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (UploadListener listener : listeners.values()) { + listener.onProgress(progress); + listener.onError(progress); + } + } + }); + } + + private void postOnFinish(final Progress progress, final String t) { + progress.speed = 0; + progress.fraction = 1.0f; + progress.status = Progress.FINISH; + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (UploadListener listener : listeners.values()) { + listener.onProgress(progress); + listener.onFinish(t, progress); + } + } + }); + } + + private void postOnRemove(final Progress progress) { + updateDatabase(progress); + QingstorHelper.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + for (UploadListener listener : listeners.values()) { + listener.onRemove(progress); + } + listeners.clear(); + } + }); + } + + private void updateDatabase(Progress progress) { + ContentValues contentValues = Progress.buildUpdateContentValues(progress); + UploadTaskManager.getInstance().update(contentValues, progress.tag); + } + + @Override + public void onProgress(java.lang.String objectKey, long currentSize, long totalSize) { + if (cancellationHandler.isCancelled()) return; + progress.status = Progress.LOADING; + Progress.changeProgress(progress, currentSize - progress.currentSize, totalSize, new Progress.Action() { + @Override + public void call(Progress progress) { + postLoading(progress); + } + }); + } + + + @Override + public void onAPIResponse(java.lang.String objectKey, OutputModel outputModel) { + Integer statusCode = outputModel.getStatueCode(); + if (statusCode >= 200 && statusCode < 400) { + postOnFinish(progress, (String) objectKey); + } else if (statusCode != QSConstant.REQUEST_ERROR_CANCELLED) { + postOnError(progress, new TaskException(outputModel)); + } + } + + @Override + public int compareTo(Object o) { + return 0; + } +} + diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/UploadThreadPool.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/UploadThreadPool.java new file mode 100644 index 0000000..6ae407a --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/UploadThreadPool.java @@ -0,0 +1,65 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.task; + +import java.util.concurrent.Executors; +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Created by chengww on 2018/12/28. + */ +public class UploadThreadPool { + private static final int MAX_IMUM_POOL_SIZE = 5; + private static final int KEEP_ALIVE_TIME = 1; + private static final TimeUnit UNIT = TimeUnit.HOURS; + private int corePoolSize = 1; + private XExecutor executor; + + public XExecutor getExecutor() { + if (executor == null) { + synchronized (UploadThreadPool.class) { + if (executor == null) { + executor = new XExecutor(corePoolSize, MAX_IMUM_POOL_SIZE, KEEP_ALIVE_TIME, UNIT, + new PriorityBlockingQueue(), + Executors.defaultThreadFactory(), + new ThreadPoolExecutor.AbortPolicy()); + } + } + } + return executor; + } + + /** Must set this before first execute. corePoolSize = 1 - 5 */ + public void setCorePoolSize(int corePoolSize) { + if (corePoolSize <= 0) corePoolSize = 1; + if (corePoolSize > MAX_IMUM_POOL_SIZE) corePoolSize = MAX_IMUM_POOL_SIZE; + this.corePoolSize = corePoolSize; + } + + public void execute(Runnable runnable) { + if (runnable != null) { + getExecutor().execute(runnable); + } + } + + public void remove(Runnable runnable) { + if (runnable != null) { + getExecutor().remove(runnable); + } + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/Uploader.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/Uploader.java new file mode 100644 index 0000000..4cd539b --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/Uploader.java @@ -0,0 +1,196 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.task; + +import android.util.Log; + +import com.chengww.qingstor_sdk_android.db.Progress; +import com.chengww.qingstor_sdk_android.db.UploadTaskManager; +import com.qingstor.sdk.service.Bucket; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by chengww on 2018/12/28. + */ +public class Uploader { + + public static final String TAG = "Qingstor_Uploader"; + private Map> taskMap; // All of the tasks 所有任务 + private UploadThreadPool threadPool; + + public static Uploader getInstance() { + return UploaderHolder.instance; + } + + private static class UploaderHolder { + private static final Uploader instance = new Uploader(); + } + + private Uploader() { + threadPool = new UploadThreadPool(); + taskMap = new LinkedHashMap<>(); + + /* + Check the validity of the data. + Prevent exit during upload process, + and state errors caused by no update of state during the second entry. + */ + List taskList = UploadTaskManager.getInstance().getUploading(); + for (Progress info : taskList) { + if (info.status == Progress.WAITING || info.status == Progress.LOADING || info.status == Progress.PAUSE) { + info.status = Progress.NONE; + } + } + UploadTaskManager.getInstance().replace(taskList); + } + + public static UploadTask request(String tag, Bucket bucket, String objectKey, String filePath) { + Map> taskMap = Uploader.getInstance().getTaskMap(); + //noinspection unchecked + UploadTask task = (UploadTask) taskMap.get(tag); + if (task == null) { + task = new UploadTask<>(tag, bucket, objectKey, filePath); + taskMap.put(tag, task); + } + return task; + } + + /** + * Restore tasks form database 从数据库中恢复任务 + */ + public static UploadTask restore(Progress progress) { + Map> taskMap = Uploader.getInstance().getTaskMap(); + //noinspection unchecked + UploadTask task = (UploadTask) taskMap.get(progress.tag); + if (task == null) { + task = new UploadTask<>(progress); + taskMap.put(progress.tag, task); + } + return task; + } + + /** + * Restore tasks form database 从数据库中恢复任务 + */ + public static List> restore(List progressList) { + Map> taskMap = Uploader.getInstance().getTaskMap(); + List> tasks = new ArrayList<>(); + for (Progress progress : progressList) { + UploadTask task = taskMap.get(progress.tag); + if (task == null) { + task = new UploadTask<>(progress); + taskMap.put(progress.tag, task); + } + tasks.add(task); + } + return tasks; + } + + public void startAll() { + for (Map.Entry> entry : taskMap.entrySet()) { + UploadTask task = entry.getValue(); + if (task == null) { + Log.w(TAG, "Can't find task with tag = " + entry.getKey()); + continue; + } + task.start(); + } + } + + public void pauseAll() { + // Stop unstarted tasks first + for (Map.Entry> entry : taskMap.entrySet()) { + UploadTask task = entry.getValue(); + if (task == null) { + Log.w(TAG, "Can't find task with tag = " + entry.getKey()); + continue; + } + if (task.progress.status != Progress.LOADING) { + task.pause(); + } + } + // Then stop ongoing tasks + for (Map.Entry> entry : taskMap.entrySet()) { + UploadTask task = entry.getValue(); + if (task == null) { + Log.w(TAG, "Can't find task with tag = " + entry.getKey()); + continue; + } + if (task.progress.status == Progress.LOADING) { + task.pause(); + } + } + } + + public void removeAll() { + Map> map = new HashMap<>(taskMap); + // Delete unstarted tasks first + for (Map.Entry> entry : map.entrySet()) { + UploadTask task = entry.getValue(); + if (task == null) { + Log.w(TAG, "Can't find task with tag = " + entry.getKey()); + continue; + } + if (task.progress.status != Progress.LOADING) { + task.remove(); + } + } + // Then delete ongoing tasks + for (Map.Entry> entry : map.entrySet()) { + UploadTask task = entry.getValue(); + if (task == null) { + Log.w(TAG, "Can't find task with tag = " + entry.getKey()); + continue; + } + if (task.progress.status == Progress.LOADING) { + task.remove(); + } + } + } + + public UploadThreadPool getThreadPool() { + return threadPool; + } + + public Map> getTaskMap() { + return taskMap; + } + + public UploadTask getTask(String tag) { + return taskMap.get(tag); + } + + public boolean hasTask(String tag) { + return taskMap.containsKey(tag); + } + + public UploadTask removeTask(String tag) { + return taskMap.remove(tag); + } + + public void addOnAllTaskEndListener(XExecutor.OnAllTaskEndListener listener) { + threadPool.getExecutor().addOnAllTaskEndListener(listener); + } + + public void removeOnAllTaskEndListener(XExecutor.OnAllTaskEndListener listener) { + threadPool.getExecutor().removeOnAllTaskEndListener(listener); + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/XExecutor.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/XExecutor.java new file mode 100644 index 0000000..446942e --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/task/XExecutor.java @@ -0,0 +1,102 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.task; + +import com.chengww.qingstor_sdk_android.QingstorHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +public class XExecutor extends ThreadPoolExecutor { + + public XExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, RejectedExecutionHandler handler) { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, handler); + } + + public XExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); + } + + public XExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory) { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory); + } + + public XExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); + } + + @Override + protected void afterExecute(final Runnable r, Throwable t) { + super.afterExecute(r, t); + if (taskEndListenerList != null && taskEndListenerList.size() > 0) { + for (final OnTaskEndListener listener : taskEndListenerList) { + QingstorHelper.getInstance().getDelivery().post(new Runnable() { + @Override + public void run() { + listener.onTaskEnd(r); + } + }); + } + } + if (getActiveCount() == 1 && getQueue().size() == 0) { + if (allTaskEndListenerList != null && allTaskEndListenerList.size() > 0) { + for (final OnAllTaskEndListener listener : allTaskEndListenerList) { + QingstorHelper.getInstance().getDelivery().post(new Runnable() { + @Override + public void run() { + listener.onAllTaskEnd(); + } + }); + } + } + } + } + + private List taskEndListenerList; + + public void addOnTaskEndListener(OnTaskEndListener taskEndListener) { + if (taskEndListenerList == null) taskEndListenerList = new ArrayList<>(); + taskEndListenerList.add(taskEndListener); + } + + public void removeOnTaskEndListener(OnTaskEndListener taskEndListener) { + taskEndListenerList.remove(taskEndListener); + } + + public interface OnTaskEndListener { + void onTaskEnd(Runnable r); + } + + private List allTaskEndListenerList; + + public void addOnAllTaskEndListener(OnAllTaskEndListener allTaskEndListener) { + if (allTaskEndListenerList == null) allTaskEndListenerList = new ArrayList<>(); + allTaskEndListenerList.add(allTaskEndListener); + } + + public void removeOnAllTaskEndListener(OnAllTaskEndListener allTaskEndListener) { + allTaskEndListenerList.remove(allTaskEndListener); + } + + public interface OnAllTaskEndListener { + void onAllTaskEnd(); + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/utils/IOUtils.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/utils/IOUtils.java new file mode 100644 index 0000000..4d6ce2e --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/utils/IOUtils.java @@ -0,0 +1,184 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.utils; + +import android.text.TextUtils; + +import com.chengww.qingstor_sdk_android.db.MyBucket; +import com.qingstor.sdk.config.EnvContext; +import com.qingstor.sdk.service.Bucket; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.lang.reflect.Field; + +/** + * Created by chengww on 2018/12/28. + */ +public class IOUtils { + public static void checkNotNull(T object, String message) { + if (object == null) { + throw new NullPointerException(message); + } + } + + public static void closeQuietly(Closeable closeable) { + if (closeable == null) return; + try { + closeable.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static byte[] toByteArray(Object input) { + ByteArrayOutputStream baos = null; + ObjectOutputStream oos = null; + try { + baos = new ByteArrayOutputStream(); + oos = new ObjectOutputStream(baos); + oos.writeObject(input); + oos.flush(); + return baos.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + IOUtils.closeQuietly(oos); + IOUtils.closeQuietly(baos); + } + return null; + } + + public static Object toObject(byte[] input) { + if (input == null) return null; + ByteArrayInputStream bais = null; + ObjectInputStream ois = null; + try { + bais = new ByteArrayInputStream(input); + ois = new ObjectInputStream(bais); + return ois.readObject(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + IOUtils.closeQuietly(ois); + IOUtils.closeQuietly(bais); + } + return null; + } + + /** + * Create a folder, If the folder exists is not created. + * + * @param folderPath folder path. + * @return True: success, or false: failure. + */ + public static boolean createFolder(String folderPath) { + if (!TextUtils.isEmpty(folderPath)) { + File folder = new File(folderPath); + return createFolder(folder); + } + return false; + } + + /** + * Create a folder, If the folder exists is not created. + * + * @param targetFolder folder path. + * @return True: success, or false: failure. + */ + public static boolean createFolder(File targetFolder) { + if (targetFolder.exists()) { + if (targetFolder.isDirectory()) return true; + //noinspection ResultOfMethodCallIgnored + targetFolder.delete(); + } + return targetFolder.mkdirs(); + } + + /** + * Delete file or folder. + * + * @param path path. + * @return is succeed. + * @see #delFileOrFolder(File) + */ + public static boolean delFileOrFolder(String path) { + if (TextUtils.isEmpty(path)) return false; + return delFileOrFolder(new File(path)); + } + + /** + * Delete file or folder. + * + * @param file file. + * @return is succeed. + * @see #delFileOrFolder(String) + */ + @SuppressWarnings("ResultOfMethodCallIgnored") + public static boolean delFileOrFolder(File file) { + if (file == null || !file.exists()) { + // do nothing + } else if (file.isFile()) { + file.delete(); + } else if (file.isDirectory()) { + File[] files = file.listFiles(); + if (files != null) { + for (File sonFile : files) { + delFileOrFolder(sonFile); + } + } + file.delete(); + } + return true; + } + + public static String getFileName(String objectKey) { + String fileName = ""; + if (!TextUtils.isEmpty(objectKey)) { + int index = objectKey.lastIndexOf("/"); + if (index > -1) { + fileName = objectKey.substring(index + 1); + } else { + fileName = objectKey; + } + } + return fileName; + } + + public static MyBucket getMyBucket(Bucket bucket) { + try { + Field field = Bucket.class.getDeclaredField("envContext"); + field.setAccessible(true); + EnvContext context = (EnvContext) field.get(bucket); + return new MyBucket(context, bucket.getZone(), bucket.getBucketName()); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } + + public static Bucket getBucket(MyBucket myBucket) { + if (myBucket == null) return null; + return new Bucket(myBucket.getEnvContext(), myBucket.getZone(), myBucket.getBucketName()); + } +} diff --git a/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/utils/ResUtils.java b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/utils/ResUtils.java new file mode 100644 index 0000000..0a4ba47 --- /dev/null +++ b/qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/utils/ResUtils.java @@ -0,0 +1,51 @@ +/* + * Copyright 2018 chengww + * + * 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 com.chengww.qingstor_sdk_android.utils; + +import android.app.Application; +import android.content.Context; +import android.text.TextUtils; + +import com.chengww.qingstor_sdk_android.QingstorHelper; + +/** + * Created by chengww on 2018/12/28. + */ +public class ResUtils { + public static String string(Context context, String key) { + if (TextUtils.isEmpty(key)) return key; + int stringID = context.getResources().getIdentifier(key, "string", context.getPackageName()); + if (stringID == 0) return key; + return context.getString(stringID); + } + + public static String string(String key) { + String result; + Application context = QingstorHelper.getInstance().getContext(); + if (context != null) result = string(context, key); + else result = key; + return result; + } + + + public static String string(int id) { + String result; + Application context = QingstorHelper.getInstance().getContext(); + if (context != null) result = context.getString(id); + else result = String.valueOf(id); + return result; + } +} diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EnvContext.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EnvContext.java index 6819116..e5948a6 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EnvContext.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EnvContext.java @@ -20,7 +20,9 @@ import com.qingstor.sdk.request.ParamValidate; import com.qingstor.sdk.utils.QSStringUtil; -public class EnvContext implements ParamValidate { +import java.io.Serializable; + +public class EnvContext implements ParamValidate, Serializable { public static String qingcloudStorHost = "qingstor.com"; public static String default_protocal = "https"; diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EvnContext.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EvnContext.java index 376198e..0e6c37b 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EvnContext.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/config/EvnContext.java @@ -16,12 +16,14 @@ package com.qingstor.sdk.config; +import java.io.Serializable; + /** * Deprecated, use {@link EnvContext} instead.
* 已过时,请使用 {@link EnvContext} */ @Deprecated -public class EvnContext extends EnvContext { +public class EvnContext extends EnvContext implements Serializable { public EvnContext(String accessKey, String accessSecret) { super(accessKey, accessSecret); diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/constants/QSConstant.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/constants/QSConstant.java index 4f44df3..6e13c50 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/constants/QSConstant.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/constants/QSConstant.java @@ -18,7 +18,7 @@ public class QSConstant { - public static String SDK_VERSION = "2.2.15"; + public static String SDK_VERSION = "2.2.16"; public static String SDK_NAME = "qingstor-sdk-java"; public static String QC_CODE_FIELD_NAME = "statue_code"; diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/exception/QSException.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/exception/QSException.java index e03371e..8dc9413 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/exception/QSException.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/exception/QSException.java @@ -16,7 +16,7 @@ package com.qingstor.sdk.exception; -public class QSException extends Exception { +public class QSException extends RuntimeException { private static final long serialVersionUID = -5562309362764717920L; diff --git a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/utils/QSJSONUtil.java b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/utils/QSJSONUtil.java index d125737..4115abd 100644 --- a/qingstor-sdk-android/src/main/java/com/qingstor/sdk/utils/QSJSONUtil.java +++ b/qingstor-sdk-android/src/main/java/com/qingstor/sdk/utils/QSJSONUtil.java @@ -399,12 +399,12 @@ private static boolean initParameter( boolean hasParam = false; for (Field field : declaredField) { String methodField = QSParamInvokeUtil.capitalize(field.getName()); - String getMethodName = - field.getType() == Boolean.class ? "is" + methodField : "get" + methodField; + String getMethodName = "get" + methodField; + String isMethodName = "is" + methodField; String setMethodName = "set" + methodField; Method[] methods = objClass.getDeclaredMethods(); for (Method m : methods) { - if (m.getName().equals(getMethodName)) { + if (m.getName().equals(getMethodName) || field.getType() == Boolean.class && m.getName().equals(isMethodName)) { ParamAnnotation annotation = m.getAnnotation(ParamAnnotation.class); if (annotation == null) { continue; diff --git a/qingstor-sdk-android/src/main/res/values-zh/strings.xml b/qingstor-sdk-android/src/main/res/values-zh/strings.xml new file mode 100644 index 0000000..de44f8d --- /dev/null +++ b/qingstor-sdk-android/src/main/res/values-zh/strings.xml @@ -0,0 +1,50 @@ + + + Access key 不正确 + 请求头 Range 不符合规则 + 请检查本地时间 + 签名不匹配 + 参数值非法 + Content-MD5 有误 + 没有权限 + Bucket 已存在 + Bucket 不存在 + 对象不存在 + Bucket 名称非法 + 创建的 bucket 超出限额 + Bucket 不为空或存在分块上传文件 + Bucket 不是活跃状态 + Bucket 租赁信息未准备好 + 请求方法不被允许 + 请求中的消息体不符规定 + 请求的区域不存在时 + 创建和删除 bucket 过于频繁 + 请求的 Header 中某些先决条件不满足 + 对象目前的状态不能接收此次操作 + 对象名称不符合规定 + 分块的大小过小(最小4MB) + 对象数据过大(最大5GB) + 分块数量过多(最大1000) + Upload id 不存在 + 账号异常 + 账号欠费 + Json 格式错误 + 请求被拒绝 + 请求消息体不完整 + 表单内容与策略不相符 + CNAME 设置错误 + 操作包含的对象数量太大 + Fetch 操作已在进程中 + 自定义元数据过大 + 服务端正在处理过多的抓取请求 + 对象存储系统内部错误 + 对象存储系统临时不可用时 + Fetch 请求失败 + 网络有误 + 下载的断点文件不存在 + 下载的断点文件已过期 + 文件不可用或已损坏 + 文件写入权限被拒绝 + 下载时发生了未知错误 + 下载时发生了 IO 异常 + \ No newline at end of file diff --git a/qingstor-sdk-android/src/main/res/values/strings.xml b/qingstor-sdk-android/src/main/res/values/strings.xml index aa11684..5b1828c 100644 --- a/qingstor-sdk-android/src/main/res/values/strings.xml +++ b/qingstor-sdk-android/src/main/res/values/strings.xml @@ -1,3 +1,50 @@ + - qingstor_sdk_android - + Invalid access key id + Invalid request header Range + Please check the local time + Signature not matched + Invalid argument + Bad digest of Content-MD5 + Permission denied + Bucket already exists + Bucket not exists + Object not exists + Invalid bucket name + Created bucket exceeded limit + Bucket not empty or multipart upload file exists + Bucket not active + Lease of the bucket not ready + Request method not allowed + Invalid Request + Invalid location(zone) + Max requests exceeded + Precondition of the request header failed + Invalid object state + Invalid object name + Entity too small(min 4MB) + Entity too large(max 5GB) + Max parts exceeded(max 1000) + Upload id not exists + Account problem + Delinquent account + Invalid json + Access denied + Incomplete body + Form policy violated + CNAME error + Too many objects + Fetch in process + Metadata too large + Fetch throttled + Internal error + Service unavailable + Upstream failed + Network error + Breakpoint file does not exist + Breakpoint file has expired + The file may be invalid or damaged + WRITE_EXTERNAL_STORAGE permission defined + An unknown error occurred when download + IO Exception occurred when download + \ No newline at end of file From 79b68ae16a2ecf05a23fd8eecfb48dd50322b3e9 Mon Sep 17 00:00:00 2001 From: chengww Date: Wed, 6 Mar 2019 15:25:47 +0800 Subject: [PATCH 09/12] Add docs --- CHANGELOG | 6 + README-zh_CN.md | 124 + README.md | 125 + docs-md/download_uploader-zh_CN.md | 126 + docs-md/downloader_uploader.md | 139 + docs/allclasses-frame.html | 187 + docs/allclasses-noframe.html | 187 + .../qingstor_sdk_android/QingstorHelper.html | 359 ++ .../db/BaseDao.Action.html | 224 + .../qingstor_sdk_android/db/BaseDao.html | 887 ++++ .../qingstor_sdk_android/db/ColumnEntity.html | 390 ++ .../qingstor_sdk_android/db/DBUtils.html | 305 ++ .../db/DownloadTaskManager.html | 453 ++ .../db/Progress.Action.html | 224 + .../qingstor_sdk_android/db/Progress.html | 1025 ++++ .../qingstor_sdk_android/db/TableEntity.html | 359 ++ .../db/UploadTaskManager.html | 453 ++ .../db/package-frame.html | 33 + .../db/package-summary.html | 200 + .../qingstor_sdk_android/db/package-tree.html | 151 + .../exception/TaskException.html | 562 +++ .../exception/package-frame.html | 21 + .../exception/package-summary.html | 143 + .../exception/package-tree.html | 144 + .../listener/DownloadListener.html | 285 ++ .../listener/ProgressListener.html | 281 ++ .../listener/UploadListener.html | 285 ++ .../listener/package-frame.html | 26 + .../listener/package-summary.html | 166 + .../listener/package-tree.html | 141 + .../qingstor_sdk_android/package-frame.html | 21 + .../qingstor_sdk_android/package-summary.html | 143 + .../qingstor_sdk_android/package-tree.html | 136 + .../recorder/DBBeanRecorder.html | 337 ++ .../recorder/package-frame.html | 21 + .../recorder/package-summary.html | 143 + .../recorder/package-tree.html | 136 + .../task/DownloadTask.html | 553 +++ .../task/DownloadThreadPool.html | 313 ++ .../qingstor_sdk_android/task/Downloader.html | 501 ++ .../qingstor_sdk_android/task/UploadTask.html | 552 +++ .../task/UploadThreadPool.html | 313 ++ .../qingstor_sdk_android/task/Uploader.html | 458 ++ .../task/XExecutor.OnAllTaskEndListener.html | 224 + .../task/XExecutor.OnTaskEndListener.html | 224 + .../qingstor_sdk_android/task/XExecutor.html | 462 ++ .../task/package-frame.html | 36 + .../task/package-summary.html | 220 + .../task/package-tree.html | 174 + .../qingstor_sdk_android/utils/IOUtils.html | 445 ++ .../qingstor_sdk_android/utils/ResUtils.html | 299 ++ .../utils/package-frame.html | 22 + .../utils/package-summary.html | 149 + .../utils/package-tree.html | 137 + .../sdk/annotation/ParamAnnotation.html | 235 + .../sdk/annotation/package-frame.html | 21 + .../sdk/annotation/package-summary.html | 141 + .../qingstor/sdk/annotation/package-tree.html | 132 + .../ImageProcessClient.CropParam.Builder.html | 313 ++ .../client/ImageProcessClient.CropParam.html | 268 ++ .../ImageProcessClient.FormatParam.html | 319 ++ .../client/ImageProcessClient.ImageParam.html | 228 + .../client/ImageProcessClient.InfoParam.html | 283 ++ ...mageProcessClient.ResizeParam.Builder.html | 313 ++ .../ImageProcessClient.ResizeParam.html | 268 ++ .../ImageProcessClient.RotateParam.html | 283 ++ ...essClient.WaterMarkImageParam.Builder.html | 313 ++ ...mageProcessClient.WaterMarkImageParam.html | 268 ++ ...eProcessClient.WaterMarkParam.Builder.html | 313 ++ .../ImageProcessClient.WaterMarkParam.html | 268 ++ .../sdk/client/ImageProcessClient.html | 565 +++ .../qingstor/sdk/client/package-frame.html | 36 + .../qingstor/sdk/client/package-summary.html | 200 + .../com/qingstor/sdk/client/package-tree.html | 151 + docs/com/qingstor/sdk/config/EnvContext.html | 670 +++ docs/com/qingstor/sdk/config/EvnContext.html | 281 ++ .../qingstor/sdk/config/package-frame.html | 22 + .../qingstor/sdk/config/package-summary.html | 145 + .../com/qingstor/sdk/config/package-tree.html | 140 + .../qingstor/sdk/constants/QSConstant.html | 1057 +++++ .../qingstor/sdk/constants/package-frame.html | 21 + .../sdk/constants/package-summary.html | 141 + .../qingstor/sdk/constants/package-tree.html | 136 + .../qingstor/sdk/exception/QSException.html | 396 ++ .../qingstor/sdk/exception/package-frame.html | 21 + .../sdk/exception/package-summary.html | 141 + .../qingstor/sdk/exception/package-tree.html | 148 + docs/com/qingstor/sdk/model/OutputModel.html | 403 ++ .../qingstor/sdk/model/RequestInputModel.html | 283 ++ .../sdk/model/ResponseCallbackModel.html | 309 ++ docs/com/qingstor/sdk/model/UploadModel.html | 449 ++ .../com/qingstor/sdk/model/package-frame.html | 24 + .../qingstor/sdk/model/package-summary.html | 156 + docs/com/qingstor/sdk/model/package-tree.html | 142 + .../sdk/request/BodyProgressListener.html | 222 + ...ellationHandler.CancellationException.html | 308 ++ .../sdk/request/CancellationHandler.html | 252 + .../qingstor/sdk/request/ParamValidate.html | 224 + docs/com/qingstor/sdk/request/QSBuilder.html | 389 ++ .../sdk/request/QSOkHttpRequestClient.html | 388 ++ docs/com/qingstor/sdk/request/QSRequest.html | 442 ++ .../qingstor/sdk/request/QSRequestBody.html | 237 + .../qingstor/sdk/request/RequestHandler.html | 528 +++ .../qingstor/sdk/request/ResourceRequest.html | 375 ++ .../sdk/request/ResourceRequestFactory.html | 270 ++ .../sdk/request/ResponseCallBack.html | 226 + .../sdk/request/impl/EmptyRequestBody.html | 305 ++ .../request/impl/InputStreamUploadBody.html | 319 ++ .../impl/MultiFileuploadRequestBody.html | 314 ++ .../sdk/request/impl/ProgressRequestBody.html | 301 ++ .../sdk/request/impl/QSFormRequestBody.html | 294 ++ .../impl/QSMultiPartUploadRequestBody.html | 312 ++ .../sdk/request/impl/QSNormalRequestBody.html | 312 ++ .../sdk/request/impl/package-frame.html | 27 + .../sdk/request/impl/package-summary.html | 165 + .../sdk/request/impl/package-tree.html | 158 + .../qingstor/sdk/request/package-frame.html | 38 + .../qingstor/sdk/request/package-summary.html | 209 + .../qingstor/sdk/request/package-tree.html | 162 + .../Bucket.AbortMultipartUploadInput.html | 319 ++ .../Bucket.AbortMultipartUploadOutput.html | 256 + .../Bucket.CompleteMultipartUploadInput.html | 534 +++ .../Bucket.CompleteMultipartUploadOutput.html | 308 ++ .../Bucket.DeleteBucketCORSOutput.html | 255 + ...cket.DeleteBucketExternalMirrorOutput.html | 255 + .../Bucket.DeleteBucketLifecycleOutput.html | 255 + ...Bucket.DeleteBucketNotificationOutput.html | 255 + .../service/Bucket.DeleteBucketOutput.html | 255 + .../Bucket.DeleteBucketPolicyOutput.html | 255 + .../Bucket.DeleteMultipleObjectsInput.html | 399 ++ .../Bucket.DeleteMultipleObjectsOutput.html | 331 ++ .../service/Bucket.DeleteObjectOutput.html | 255 + .../service/Bucket.GetBucketACLOutput.html | 328 ++ .../service/Bucket.GetBucketCORSOutput.html | 302 ++ .../Bucket.GetBucketExternalMirrorOutput.html | 302 ++ .../Bucket.GetBucketLifecycleOutput.html | 302 ++ .../Bucket.GetBucketNotificationOutput.html | 302 ++ .../service/Bucket.GetBucketPolicyOutput.html | 302 ++ .../Bucket.GetBucketStatisticsOutput.html | 458 ++ .../sdk/service/Bucket.GetObjectInput.html | 670 +++ .../sdk/service/Bucket.GetObjectOutput.html | 906 ++++ .../sdk/service/Bucket.HeadBucketOutput.html | 255 + .../sdk/service/Bucket.HeadObjectInput.html | 481 ++ .../sdk/service/Bucket.HeadObjectOutput.html | 439 ++ .../sdk/service/Bucket.ImageProcessInput.html | 508 ++ .../service/Bucket.ImageProcessOutput.html | 350 ++ .../Bucket.InitiateMultipartUploadInput.html | 427 ++ .../Bucket.InitiateMultipartUploadOutput.html | 385 ++ .../service/Bucket.ListMultipartInput.html | 373 ++ .../service/Bucket.ListMultipartOutput.html | 331 ++ .../Bucket.ListMultipartUploadsInput.html | 429 ++ .../Bucket.ListMultipartUploadsOutput.html | 517 ++ .../sdk/service/Bucket.ListObjectsInput.html | 400 ++ .../sdk/service/Bucket.ListObjectsOutput.html | 540 +++ .../service/Bucket.OptionsObjectInput.html | 373 ++ .../service/Bucket.OptionsObjectOutput.html | 409 ++ .../sdk/service/Bucket.PutBucketACLInput.html | 345 ++ .../service/Bucket.PutBucketACLOutput.html | 256 + .../service/Bucket.PutBucketCORSInput.html | 345 ++ .../service/Bucket.PutBucketCORSOutput.html | 256 + .../Bucket.PutBucketExternalMirrorInput.html | 345 ++ .../Bucket.PutBucketExternalMirrorOutput.html | 256 + .../Bucket.PutBucketLifecycleInput.html | 345 ++ .../Bucket.PutBucketLifecycleOutput.html | 256 + .../Bucket.PutBucketNotificationInput.html | 345 ++ .../Bucket.PutBucketNotificationOutput.html | 256 + .../sdk/service/Bucket.PutBucketOutput.html | 255 + .../service/Bucket.PutBucketPolicyInput.html | 345 ++ .../service/Bucket.PutBucketPolicyOutput.html | 256 + .../sdk/service/Bucket.PutObjectInput.html | 944 ++++ .../sdk/service/Bucket.PutObjectOutput.html | 350 ++ .../service/Bucket.UploadMultipartInput.html | 889 ++++ .../service/Bucket.UploadMultipartOutput.html | 374 ++ docs/com/qingstor/sdk/service/Bucket.html | 4206 +++++++++++++++++ .../service/QingStor.ListBucketsInput.html | 319 ++ .../service/QingStor.ListBucketsOutput.html | 329 ++ docs/com/qingstor/sdk/service/QingStor.html | 411 ++ .../qingstor/sdk/service/Types.ACLModel.html | 341 ++ ...s.AbortIncompleteMultipartUploadModel.html | 315 ++ .../sdk/service/Types.BucketModel.html | 393 ++ .../sdk/service/Types.CORSRuleModel.html | 419 ++ .../sdk/service/Types.CloudfuncArgsModel.html | 393 ++ .../sdk/service/Types.ConditionModel.html | 419 ++ .../sdk/service/Types.ExpirationModel.html | 315 ++ .../sdk/service/Types.FilterModel.html | 315 ++ .../sdk/service/Types.GranteeModel.html | 367 ++ .../sdk/service/Types.IPAddressModel.html | 315 ++ .../sdk/service/Types.IsNullModel.html | 315 ++ .../service/Types.KeyDeleteErrorModel.html | 367 ++ .../qingstor/sdk/service/Types.KeyModel.html | 471 ++ .../sdk/service/Types.NotIPAddressModel.html | 315 ++ .../sdk/service/Types.NotificationModel.html | 445 ++ .../sdk/service/Types.ObjectPartModel.html | 393 ++ .../sdk/service/Types.OwnerModel.html | 341 ++ .../qingstor/sdk/service/Types.RuleModel.html | 445 ++ .../sdk/service/Types.StatementModel.html | 445 ++ .../sdk/service/Types.StringLikeModel.html | 315 ++ .../sdk/service/Types.StringNotLikeModel.html | 315 ++ .../sdk/service/Types.TransitionModel.html | 341 ++ .../sdk/service/Types.UploadsModel.html | 367 ++ docs/com/qingstor/sdk/service/Types.html | 343 ++ .../qingstor/sdk/service/package-frame.html | 102 + .../qingstor/sdk/service/package-summary.html | 579 +++ .../qingstor/sdk/service/package-tree.html | 225 + docs/com/qingstor/sdk/upload/Recorder.html | 278 ++ ...dManager.CompleteMultipartUploadInput.html | 338 ++ .../upload/UploadManager.PutObjectInput.html | 308 ++ .../qingstor/sdk/upload/UploadManager.html | 583 +++ .../sdk/upload/UploadManagerCallback.html | 280 ++ .../sdk/upload/UploadProgressListener.html | 229 + .../sdk/upload/impl/FileRecorder.html | 344 ++ .../sdk/upload/impl/package-frame.html | 21 + .../sdk/upload/impl/package-summary.html | 143 + .../sdk/upload/impl/package-tree.html | 136 + .../qingstor/sdk/upload/package-frame.html | 29 + .../qingstor/sdk/upload/package-summary.html | 180 + .../com/qingstor/sdk/upload/package-tree.html | 156 + docs/com/qingstor/sdk/utils/Base64.html | 301 ++ docs/com/qingstor/sdk/utils/QSJSONUtil.html | 694 +++ docs/com/qingstor/sdk/utils/QSLoggerUtil.html | 270 ++ .../qingstor/sdk/utils/QSParamInvokeUtil.html | 356 ++ .../sdk/utils/QSServerSignatureUtil.html | 315 ++ .../qingstor/sdk/utils/QSSignatureUtil.html | 498 ++ docs/com/qingstor/sdk/utils/QSStringUtil.html | 430 ++ .../com/qingstor/sdk/utils/package-frame.html | 27 + .../qingstor/sdk/utils/package-summary.html | 167 + docs/com/qingstor/sdk/utils/package-tree.html | 142 + docs/constant-values.html | 610 +++ docs/deprecated-list.html | 209 + docs/help-doc.html | 224 + docs/index-all.html | 3943 +++++++++++++++ docs/index.html | 76 + docs/overview-frame.html | 40 + docs/overview-summary.html | 209 + docs/overview-tree.html | 399 ++ docs/package-list | 19 + docs/script.js | 30 + docs/serialized-form.html | 479 ++ docs/stylesheet.css | 574 +++ 239 files changed, 79267 insertions(+) create mode 100644 CHANGELOG create mode 100644 README-zh_CN.md create mode 100644 README.md create mode 100644 docs-md/download_uploader-zh_CN.md create mode 100644 docs-md/downloader_uploader.md create mode 100644 docs/allclasses-frame.html create mode 100644 docs/allclasses-noframe.html create mode 100644 docs/com/chengww/qingstor_sdk_android/QingstorHelper.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/BaseDao.Action.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/BaseDao.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/ColumnEntity.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/DBUtils.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/DownloadTaskManager.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/Progress.Action.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/Progress.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/TableEntity.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/UploadTaskManager.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/package-frame.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/package-summary.html create mode 100644 docs/com/chengww/qingstor_sdk_android/db/package-tree.html create mode 100644 docs/com/chengww/qingstor_sdk_android/exception/TaskException.html create mode 100644 docs/com/chengww/qingstor_sdk_android/exception/package-frame.html create mode 100644 docs/com/chengww/qingstor_sdk_android/exception/package-summary.html create mode 100644 docs/com/chengww/qingstor_sdk_android/exception/package-tree.html create mode 100644 docs/com/chengww/qingstor_sdk_android/listener/DownloadListener.html create mode 100644 docs/com/chengww/qingstor_sdk_android/listener/ProgressListener.html create mode 100644 docs/com/chengww/qingstor_sdk_android/listener/UploadListener.html create mode 100644 docs/com/chengww/qingstor_sdk_android/listener/package-frame.html create mode 100644 docs/com/chengww/qingstor_sdk_android/listener/package-summary.html create mode 100644 docs/com/chengww/qingstor_sdk_android/listener/package-tree.html create mode 100644 docs/com/chengww/qingstor_sdk_android/package-frame.html create mode 100644 docs/com/chengww/qingstor_sdk_android/package-summary.html create mode 100644 docs/com/chengww/qingstor_sdk_android/package-tree.html create mode 100644 docs/com/chengww/qingstor_sdk_android/recorder/DBBeanRecorder.html create mode 100644 docs/com/chengww/qingstor_sdk_android/recorder/package-frame.html create mode 100644 docs/com/chengww/qingstor_sdk_android/recorder/package-summary.html create mode 100644 docs/com/chengww/qingstor_sdk_android/recorder/package-tree.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/DownloadTask.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/DownloadThreadPool.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/Downloader.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/UploadTask.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/UploadThreadPool.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/Uploader.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/XExecutor.OnAllTaskEndListener.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/XExecutor.OnTaskEndListener.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/XExecutor.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/package-frame.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/package-summary.html create mode 100644 docs/com/chengww/qingstor_sdk_android/task/package-tree.html create mode 100644 docs/com/chengww/qingstor_sdk_android/utils/IOUtils.html create mode 100644 docs/com/chengww/qingstor_sdk_android/utils/ResUtils.html create mode 100644 docs/com/chengww/qingstor_sdk_android/utils/package-frame.html create mode 100644 docs/com/chengww/qingstor_sdk_android/utils/package-summary.html create mode 100644 docs/com/chengww/qingstor_sdk_android/utils/package-tree.html create mode 100644 docs/com/qingstor/sdk/annotation/ParamAnnotation.html create mode 100644 docs/com/qingstor/sdk/annotation/package-frame.html create mode 100644 docs/com/qingstor/sdk/annotation/package-summary.html create mode 100644 docs/com/qingstor/sdk/annotation/package-tree.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.CropParam.Builder.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.CropParam.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.FormatParam.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.ImageParam.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.InfoParam.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.ResizeParam.Builder.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.ResizeParam.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.RotateParam.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkImageParam.Builder.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkImageParam.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkParam.Builder.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkParam.html create mode 100644 docs/com/qingstor/sdk/client/ImageProcessClient.html create mode 100644 docs/com/qingstor/sdk/client/package-frame.html create mode 100644 docs/com/qingstor/sdk/client/package-summary.html create mode 100644 docs/com/qingstor/sdk/client/package-tree.html create mode 100644 docs/com/qingstor/sdk/config/EnvContext.html create mode 100644 docs/com/qingstor/sdk/config/EvnContext.html create mode 100644 docs/com/qingstor/sdk/config/package-frame.html create mode 100644 docs/com/qingstor/sdk/config/package-summary.html create mode 100644 docs/com/qingstor/sdk/config/package-tree.html create mode 100644 docs/com/qingstor/sdk/constants/QSConstant.html create mode 100644 docs/com/qingstor/sdk/constants/package-frame.html create mode 100644 docs/com/qingstor/sdk/constants/package-summary.html create mode 100644 docs/com/qingstor/sdk/constants/package-tree.html create mode 100644 docs/com/qingstor/sdk/exception/QSException.html create mode 100644 docs/com/qingstor/sdk/exception/package-frame.html create mode 100644 docs/com/qingstor/sdk/exception/package-summary.html create mode 100644 docs/com/qingstor/sdk/exception/package-tree.html create mode 100644 docs/com/qingstor/sdk/model/OutputModel.html create mode 100644 docs/com/qingstor/sdk/model/RequestInputModel.html create mode 100644 docs/com/qingstor/sdk/model/ResponseCallbackModel.html create mode 100644 docs/com/qingstor/sdk/model/UploadModel.html create mode 100644 docs/com/qingstor/sdk/model/package-frame.html create mode 100644 docs/com/qingstor/sdk/model/package-summary.html create mode 100644 docs/com/qingstor/sdk/model/package-tree.html create mode 100644 docs/com/qingstor/sdk/request/BodyProgressListener.html create mode 100644 docs/com/qingstor/sdk/request/CancellationHandler.CancellationException.html create mode 100644 docs/com/qingstor/sdk/request/CancellationHandler.html create mode 100644 docs/com/qingstor/sdk/request/ParamValidate.html create mode 100644 docs/com/qingstor/sdk/request/QSBuilder.html create mode 100644 docs/com/qingstor/sdk/request/QSOkHttpRequestClient.html create mode 100644 docs/com/qingstor/sdk/request/QSRequest.html create mode 100644 docs/com/qingstor/sdk/request/QSRequestBody.html create mode 100644 docs/com/qingstor/sdk/request/RequestHandler.html create mode 100644 docs/com/qingstor/sdk/request/ResourceRequest.html create mode 100644 docs/com/qingstor/sdk/request/ResourceRequestFactory.html create mode 100644 docs/com/qingstor/sdk/request/ResponseCallBack.html create mode 100644 docs/com/qingstor/sdk/request/impl/EmptyRequestBody.html create mode 100644 docs/com/qingstor/sdk/request/impl/InputStreamUploadBody.html create mode 100644 docs/com/qingstor/sdk/request/impl/MultiFileuploadRequestBody.html create mode 100644 docs/com/qingstor/sdk/request/impl/ProgressRequestBody.html create mode 100644 docs/com/qingstor/sdk/request/impl/QSFormRequestBody.html create mode 100644 docs/com/qingstor/sdk/request/impl/QSMultiPartUploadRequestBody.html create mode 100644 docs/com/qingstor/sdk/request/impl/QSNormalRequestBody.html create mode 100644 docs/com/qingstor/sdk/request/impl/package-frame.html create mode 100644 docs/com/qingstor/sdk/request/impl/package-summary.html create mode 100644 docs/com/qingstor/sdk/request/impl/package-tree.html create mode 100644 docs/com/qingstor/sdk/request/package-frame.html create mode 100644 docs/com/qingstor/sdk/request/package-summary.html create mode 100644 docs/com/qingstor/sdk/request/package-tree.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.AbortMultipartUploadInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.AbortMultipartUploadOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.CompleteMultipartUploadInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.CompleteMultipartUploadOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.DeleteBucketCORSOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.DeleteBucketExternalMirrorOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.DeleteBucketLifecycleOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.DeleteBucketNotificationOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.DeleteBucketOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.DeleteBucketPolicyOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.DeleteMultipleObjectsInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.DeleteMultipleObjectsOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.DeleteObjectOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.GetBucketACLOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.GetBucketCORSOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.GetBucketExternalMirrorOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.GetBucketLifecycleOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.GetBucketNotificationOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.GetBucketPolicyOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.GetBucketStatisticsOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.GetObjectInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.GetObjectOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.HeadBucketOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.HeadObjectInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.HeadObjectOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.ImageProcessInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.ImageProcessOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.InitiateMultipartUploadInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.InitiateMultipartUploadOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.ListMultipartInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.ListMultipartOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.ListMultipartUploadsInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.ListMultipartUploadsOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.ListObjectsInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.ListObjectsOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.OptionsObjectInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.OptionsObjectOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketACLInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketACLOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketCORSInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketCORSOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketExternalMirrorInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketExternalMirrorOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketLifecycleInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketLifecycleOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketNotificationInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketNotificationOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketPolicyInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutBucketPolicyOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutObjectInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.PutObjectOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.UploadMultipartInput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.UploadMultipartOutput.html create mode 100644 docs/com/qingstor/sdk/service/Bucket.html create mode 100644 docs/com/qingstor/sdk/service/QingStor.ListBucketsInput.html create mode 100644 docs/com/qingstor/sdk/service/QingStor.ListBucketsOutput.html create mode 100644 docs/com/qingstor/sdk/service/QingStor.html create mode 100644 docs/com/qingstor/sdk/service/Types.ACLModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.AbortIncompleteMultipartUploadModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.BucketModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.CORSRuleModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.CloudfuncArgsModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.ConditionModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.ExpirationModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.FilterModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.GranteeModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.IPAddressModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.IsNullModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.KeyDeleteErrorModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.KeyModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.NotIPAddressModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.NotificationModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.ObjectPartModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.OwnerModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.RuleModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.StatementModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.StringLikeModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.StringNotLikeModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.TransitionModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.UploadsModel.html create mode 100644 docs/com/qingstor/sdk/service/Types.html create mode 100644 docs/com/qingstor/sdk/service/package-frame.html create mode 100644 docs/com/qingstor/sdk/service/package-summary.html create mode 100644 docs/com/qingstor/sdk/service/package-tree.html create mode 100644 docs/com/qingstor/sdk/upload/Recorder.html create mode 100644 docs/com/qingstor/sdk/upload/UploadManager.CompleteMultipartUploadInput.html create mode 100644 docs/com/qingstor/sdk/upload/UploadManager.PutObjectInput.html create mode 100644 docs/com/qingstor/sdk/upload/UploadManager.html create mode 100644 docs/com/qingstor/sdk/upload/UploadManagerCallback.html create mode 100644 docs/com/qingstor/sdk/upload/UploadProgressListener.html create mode 100644 docs/com/qingstor/sdk/upload/impl/FileRecorder.html create mode 100644 docs/com/qingstor/sdk/upload/impl/package-frame.html create mode 100644 docs/com/qingstor/sdk/upload/impl/package-summary.html create mode 100644 docs/com/qingstor/sdk/upload/impl/package-tree.html create mode 100644 docs/com/qingstor/sdk/upload/package-frame.html create mode 100644 docs/com/qingstor/sdk/upload/package-summary.html create mode 100644 docs/com/qingstor/sdk/upload/package-tree.html create mode 100644 docs/com/qingstor/sdk/utils/Base64.html create mode 100644 docs/com/qingstor/sdk/utils/QSJSONUtil.html create mode 100644 docs/com/qingstor/sdk/utils/QSLoggerUtil.html create mode 100644 docs/com/qingstor/sdk/utils/QSParamInvokeUtil.html create mode 100644 docs/com/qingstor/sdk/utils/QSServerSignatureUtil.html create mode 100644 docs/com/qingstor/sdk/utils/QSSignatureUtil.html create mode 100644 docs/com/qingstor/sdk/utils/QSStringUtil.html create mode 100644 docs/com/qingstor/sdk/utils/package-frame.html create mode 100644 docs/com/qingstor/sdk/utils/package-summary.html create mode 100644 docs/com/qingstor/sdk/utils/package-tree.html create mode 100644 docs/constant-values.html create mode 100644 docs/deprecated-list.html create mode 100644 docs/help-doc.html create mode 100644 docs/index-all.html create mode 100644 docs/index.html create mode 100644 docs/overview-frame.html create mode 100644 docs/overview-summary.html create mode 100644 docs/overview-tree.html create mode 100644 docs/package-list create mode 100644 docs/script.js create mode 100644 docs/serialized-form.html create mode 100644 docs/stylesheet.css diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..709a428 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,6 @@ +# Change Log +All notable changes to QingStor SDK for JAVA will be documented in this file. + +## [v0.1.0 and before] - 2019-03-06 + +First released version. \ No newline at end of file diff --git a/README-zh_CN.md b/README-zh_CN.md new file mode 100644 index 0000000..c87eee4 --- /dev/null +++ b/README-zh_CN.md @@ -0,0 +1,124 @@ +# QingStor SDK for Android + +[![下载](https://api.bintray.com/packages/chengww5217/chengww/qingstor-sdk-android/images/download.svg)](https://bintray.com/chengww5217/chengww/qingstor-sdk-android) +[![API 参考](http://img.shields.io/badge/api-reference-green.svg)](http://docs.qingcloud.com) +[![许可](http://img.shields.io/badge/license-apache%20v2-blue.svg)](https://github.com/chengww5217/qingstor-sdk-android/blob/master/LICENSE) + +[English](./README.md) | 简体中文 + +青云对象存储 Android 平台 SDK 非官方版本。 + +本项目基于 [qingstor-sdk-java](https://github.com/yunify/qingstor-sdk-java)。 + +以下是 qingstor-sdk-android 和 qingstor-sdk-java 之间的不同点: + +- 那些应该回调在主线程的方法(onProgress() 和 onAPIResponse() 等), 将会正确回调在**安卓主线程**中。 +- 使用安卓自带的 JSON 包替换 `org.json:json:20140107`。 +- 移除 `org.yaml:snakeyaml:1.17` 包以及其相关的代码。 +- 新增专为安卓设计的 Downloader 和 Uploader 管理器。 +- 新增方法 QingstorHelper#handleResponse() 来处理 callback 中的回应。 + +您可以在这里看到包含完整包结构的 SDK 文档: [github pages](https://qingstor-sdk-android.chengww.com). + +## 开始使用 + +### 安装 + +配置此依赖项: + +``` +implementation 'com.chengww:qingstor-sdk-android:0.1.0' +``` + +### 使用 + +#### 准备工作 + +在你的 Application 中初始化 QingstorHelper: + +```Java +QingstorHelper.getInstance().init(this); +``` + +**PS: 别忘了在清单文件中注册你的 Application。** + +#### 独立的 API 使用 + +每一个独立的 API 都和 [qingstor-sdk-java](https://github.com/yunify/qingstor-sdk-java/blob/master/README.md) 中的方法一一对应。 + +你可以直接使用 `XXXAsync()/sendAsync()` 方法, 然后会在**安卓主线程**中回调。 + +例如,下面是列取 Bucket(List Buckets) 的代码. + +```Java +EnvContext context = new EnvContext(accessKey, accessSecret); +QingStor qingStor = new QingStor(context); +qingStor.listBucketsAsync(null, new ResponseCallBack() { + @Override + public void onAPIResponse(QingStor.ListBucketsOutput output) { + try { + QingstorHelper.getInstance().handleResponse(output); + // Success + List buckets = output.getBuckets(); + // TODO: Do something here + } catch (TaskException exception) { + // Error + ToastUtils.show(MainActivity.this, exception.getI18nHint()); + } + } +}); + +``` + +List Objects: + +```Java +EnvContext context = new EnvContext("accessKey","accessSecret"); +QingStor stor = new QingStor(context); +Bucket bucket = stor.getBucket("bucketName", "pek3b"); +Bucket.ListObjectsInput listObjectsInput = new Bucket.ListObjectsInput(); +listObjectsInput.setLimit(100); +listObjectsInput.setDelimiter("/"); +listObjectsInput.setPrefix(prefix); +bucket.listObjectsAsync(listObjectsInput, new ResponseCallBack() { + @Override + public void onAPIResponse(Bucket.ListObjectsOutput output) { + try { + QingstorHelper.getInstance().handleResponse(output); + // TODO: Do something here + } catch (TaskException e) { + ToastUtils.show(ObjectListActivity.this, e.getI18nHint()); + } + } +}); +``` + +PS: 不要像下面代码一样直接上传/下载文件。因为 XXXAsync() 方法会在主线程中回调,这里不能写文件。 +```Java +// 错误示范,不要这样尝试。 +bucket.getObjectAsync("objectName", null, new ResponseCallBack() { + @Override + public void onAPIResponse(Bucket.GetObjectOutput output) { + // 在此写文件... + } +}); +``` +你应该新建一个线程,使用同步的方法来获取。或者[使用安卓 SDK 中的 Downloader/Uploader](./docs-md/download_uploader-zh_CN.md)。 + +查看更多示例信息,请参考 [demo](./demo/README-zh_CN.md)。 + +查看我们的 [releases](https://github.com/chengww5217/qingstor-sdk-android/releases) 和 [change logs](./CHANGELOG.md) 来获取关于新特性、bug 修复和新功能的信息。 + +## 对应文档 + +- [QingCloud Documentation Overview](https://docs.qingcloud.com) +- [QingStor APIs](https://docs.qingcloud.com/qingstor/api/index.html) +- [Guide of qingstor-sdk-java](https://github.com/yunify/qingstor-sdk-java/blob/master/docs/guide_zh.md) + +## 混淆 + +如果你使用混淆,请将 [proguard-rules.pro](./qingstor-sdk-android/proguard-rules.pro) 内的规则加入你的混淆文件。 + +## LICENSE + +The Apache License (Version 2.0, January 2004). \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..541999b --- /dev/null +++ b/README.md @@ -0,0 +1,125 @@ +# QingStor SDK for Android + +[![Download](https://api.bintray.com/packages/chengww5217/chengww/qingstor-sdk-android/images/download.svg)](https://bintray.com/chengww5217/chengww/qingstor-sdk-android) +[![API Reference](http://img.shields.io/badge/api-reference-green.svg)](http://docs.qingcloud.com) +[![License](http://img.shields.io/badge/license-apache%20v2-blue.svg)](https://github.com/chengww5217/qingstor-sdk-android/blob/master/LICENSE) + +English | [简体中文](./README-zh_CN.md) + +The unofficial QingStor SDK for the platform Android. + +This project is based on [qingstor-sdk-java](https://github.com/yunify/qingstor-sdk-java). + +There are some differences between qingstor-sdk-android and qingstor-sdk-java: + +- All of the methods which should have been called(onProgress() and onAPIResponse() etc.), will be called in the **Android Main Thread**. +- Replace `org.json:json:20140107` with Android's own. +- Remove `org.yaml:snakeyaml:1.17` and related codes. +- Add Downloader and Uploader management for Android. +- Add the method QingstorHelper#handleResponse() to handle the response of the callback. + +You can see documents containing the complete package structure here: [github pages](https://qingstor-sdk-android.chengww.com). + + +## Getting Started + +### Installation + +Configure this dependency: + +``` +implementation 'com.chengww:qingstor-sdk-android:0.1.0' +``` + +### Usage + +#### Preparation + +Init QingstorHelper in your Application: + +```Java +QingstorHelper.getInstance().init(this); +``` + +**PS: Don't forget to register your Application in the manifest file.** + +#### Independent API Usage + +Each independent API refers to [qingstor-sdk-java](https://github.com/yunify/qingstor-sdk-java/blob/master/README.md). + +You can use `XXXAsync()/sendAsync()`, and the callbacks will be called in the **Android Main Thread**. + +For example, there are some codes to list buckets. + +```Java +EnvContext context = new EnvContext(accessKey, accessSecret); +QingStor qingStor = new QingStor(context); +qingStor.listBucketsAsync(null, new ResponseCallBack() { + @Override + public void onAPIResponse(QingStor.ListBucketsOutput output) { + try { + QingstorHelper.getInstance().handleResponse(output); + // Success + List buckets = output.getBuckets(); + // TODO: Do something here + } catch (TaskException exception) { + // Error + ToastUtils.show(MainActivity.this, exception.getI18nHint()); + } + } +}); + +``` + +List Objects: + +```Java +EnvContext context = new EnvContext("accessKey","accessSecret"); +QingStor stor = new QingStor(context); +Bucket bucket = stor.getBucket("bucketName", "pek3b"); +Bucket.ListObjectsInput listObjectsInput = new Bucket.ListObjectsInput(); +listObjectsInput.setLimit(100); +listObjectsInput.setDelimiter("/"); +listObjectsInput.setPrefix(prefix); +bucket.listObjectsAsync(listObjectsInput, new ResponseCallBack() { + @Override + public void onAPIResponse(Bucket.ListObjectsOutput output) { + try { + QingstorHelper.getInstance().handleResponse(output); + // TODO: Do something here + } catch (TaskException e) { + ToastUtils.show(ObjectListActivity.this, e.getI18nHint()); + } + } +}); +``` + +PS: Do not download/upload objects as below codes shown, cause XXXAsync() calls in the main thread where cannot write objects. +```Java +// A wrong demonstration. Do not try codes below. +bucket.getObjectAsync("objectName", null, new ResponseCallBack() { + @Override + public void onAPIResponse(Bucket.GetObjectOutput output) { + // Write the object into the storage here... + } +}); +``` +You should new a thread to get the object use a synchronous method or [use the Downloader/Uploader in the android SDK](./docs-md/download_uploader.md). + +See the [demo](./demo/README.md) for more sample information. + +Checkout our [releases](https://github.com/chengww5217/qingstor-sdk-android/releases) and [change logs](./CHANGELOG.md) for information about the latest features, bug fixes and new ideas. + +## Reference Documentations + +- [QingCloud Documentation Overview](https://docs.qingcloud.com) +- [QingStor APIs](https://docs.qingcloud.com/qingstor/api/index.html) +- [Guide of qingstor-sdk-java](https://github.com/yunify/qingstor-sdk-java/blob/master/README.md) + +## R8 / ProGuard + +If you are using R8 or ProGuard add the options from [proguard-rules.pro](./qingstor-sdk-android/proguard-rules.pro). + +## LICENSE + +The Apache License (Version 2.0, January 2004). \ No newline at end of file diff --git a/docs-md/download_uploader-zh_CN.md b/docs-md/download_uploader-zh_CN.md new file mode 100644 index 0000000..f06fe28 --- /dev/null +++ b/docs-md/download_uploader-zh_CN.md @@ -0,0 +1,126 @@ +# Downloader 和 Uploader 的使用 + +Downloader 和 Uploader 是安卓 SDK 中的全局下载与上传管理器。 + +## 主要功能 + +- 所有任务按照 tag 进行区分 +- 对任务进行全局管理 +- 自带线程池,支持设置并发数(默认下载 3 并发,上传 1 并发) +- 采用数据库存储任务进度,便于管理 +- 包含多个任务状态(无状态、下载、暂停、等待、出错、完成) +- 支持断点下载/上传 + +## Progress + +[Progress](../qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/Progress.java) 对象是 Downloader 和 Uploader 中持有的一个记录进度信息的对象。 +它会在进度回调时,在回调方法的参数中出现。 + +成员变量 **status** 代表任务当前的状态,该状态永远是 NONE、WAITING、LOADING、PAUSE、ERROR、FINISH(无状态、下载、暂停、等待、出错、完成) 中的一种。其余内部各字段含义参考源代码注释。 + +## 使用 + +### 全局基本配置 + +以下配置可以在第一次使用时进行初始化: + +```Java +Downloader.getInstance() = downloader; + +// 设置全局下载目录,以后每个任务如果不设置目录,将默认用此目录。如果不设置,默认为 download 目录 +String path = Environment.getExternalStorageDirectory().getPath() + "/download/"; +downloader.setFolder(path); + +// 设置同时下载任务数(默认 3)。仅第一次调用时生效 +downloader.getThreadPool().setCorePoolSize(3); + +// 添加所有下载任务结束的监听 +downloader.addOnAllTaskEndListener(listener); + +``` + +### 全局任务操作能力 + +以下方法的调用对象是 Downloader.getInstance() + +- startAll():开始所有任务。 +- pauseAll():暂停所有任务。 +- removeAll()/removeAll(false):移除所有任务,不删除下载的文件。 +- removeAll(true):移除所有任务,删除下载的文件。 +- removeTask():根据 tag 移除任务。 +- getTaskMap():获取当前所有下载任务的 map。 +- getTask():根据 tag 获取任务。 +- hasTask():判断标识为 tag 的任务是否存在。 + +### 单任务操作能力 + +以下方法的调用对象是 DownloadTask + +- start():开始任务(开始新任务、暂停的任务、失败的任务)。 +- pause():暂停任务。 +- remove()/remove(false):移除任务,不删除下载的文件。 +- remove(true):移除任务,删除下载的文件。 +- restart():重新开始任务。将会删除之前的任务和文件,然后从头开始重新下载该文件。 +- save():任务数据保存。详细信息见下方 **添加新任务并开始** + +一些单任务配置相关的方法 + +- folder():单独指定当前任务的下载文件夹。不指定,默认下载路径为 ` /storage/emulated/0/download ` 。 +- fileName():手动指定下载的文件名,建议不要自己指定,会自动获取。 +- extra():相当于数据库的扩展字段,提供三个扩展字段,允许用户保存自定义数据。 +- register():注册监听的方法。监听可以注册多个,同时生效,当状态发生改变的时候,每个监听都会收到通知。 + +#### 添加新任务并开始 + +```Java +DownloadTask task = Downloader.request(tag, bucket, objectKey); +``` + +使用该方法可以创建 DownloadTask 对象。接受三个参数,第一个参数是 tag,表示当前任务的唯一标识。 +就像介绍中说的,所有下载任务按照 tag 区分,不同的任务必须使用不一样的tag。 +相同的下载地址,如果使用不一样的 tag,也会认为是两个下载任务,不同的下载地址,如使用相同的 tag,也会认为是同一个任务(会导致断点错乱)。 + +使用上述方法创建 task 后并不能直接调用 start() 方法开始任务。所有新创建的任务都要先调用 save() 方法保存进度信息后才可调用开始方法。 +如果对某个任务进行了参数的修改,比如修改了 extra 数据、下载文件夹等,也必须调用 save() 方法,以保存数据。 + +下面是创建任务并开始的一段示例代码: + +```Java +Downloader.request(tag, bucket, objectKey).save().start(); +``` + +## 任务监听 + +下载监听回调使用的是 DownloadListener 。 +DownloadListener 的构造方法需要传入一个 tag,这个 tag 唯一标识当前 listener,主要目的是方便取消监听,同时可以防止数据错乱。 +该 listener 有五个回调方法,全部在主线程回调。 +onProgress() 方法不仅在进度变化的时候会被回调,下载状态变化的时候也会回调。很多时候,想监听状态变化,在这个方法中就足够了。 + +注册监听请使用 `task.register(listener);` 。 +取消监听请使用 `task.unregister(tag);` 。 + +注册所有任务结束的监听请使用 `Downloader.getInstance().addOnAllTaskEndListener(allTaskEndListener);` 。 +取消所有任务结束的监听请使用 `Downloader.getInstance().removeOnAllTaskEndListener(allTaskEndListener);` 。 + +### DownloadTaskManager + +下载任务的相关信息是保存在数据库中的。DownloadTaskManager 类是对下载任务的数据库进行增删改查的管理类。 +如非必要,请不要直接使用 DownloadTaskManager 的 api 修改相关保存的数据。而应该使用 Downloader 的 api 进行操作,这样才能确保数据的完整性和准确性。 + +下面介绍三个常用的方法: + +```Java +List all = DownloadTaskManager.getInstance().getAll(); +List finished = DownloadTaskManager.getInstance().getFinished(); +List downloading = DownloadTaskManager.getInstance().getDownloading(); +``` + +上述方法分别表示从数据库中获取所有的下载记录,已完成的下载记录和未完成的下载记录。 +获取的是 Progress 对象的列表,一般还需要和 Downloader 的方法配合使用。即获取数据后,将数据库的集合数据恢复到 Downloader 的 taskMap 中: +` Downloader.restore(DownloadTaskManager.getInstance().getAll()); ` + +以上恢复方法会在 QingStor SDK Android 的初始化方法中自动使用。 +这样就实现了整个任务信息的存储和恢复。 + +以上关于 Downloader 的使用讲解已全部结束。Uploader 的使用几乎和 Downloader 完全一样。 +如需更多示例信息,请参考相关 [demo](../demo/README-zh_CN.md)。 diff --git a/docs-md/downloader_uploader.md b/docs-md/downloader_uploader.md new file mode 100644 index 0000000..1392785 --- /dev/null +++ b/docs-md/downloader_uploader.md @@ -0,0 +1,139 @@ +# Usage of Downloader and Uploader + +Downloader and Uploader are the global download and upload managers in the Android SDK. + +## Main functions + +- All tasks are differentiated by tag +- Managing tasks globally +- With thread pool, support setting concurrency number (default download 3 concurrency, upload 1 concurrency) +- Using database to store task schedule +- Contains multiple task states (NONE、WAITING、LOADING、PAUSE、ERROR、FINISH) +- Support breakpoint download/upload + +## Progress + +[Progress](../qingstor-sdk-android/src/main/java/com/chengww/qingstor_sdk_android/db/Progress.java) is an object that records progress information held in Downloader and Uploader. +It will appear in the parameters of the callback method during the callback of progress. + +The member variable **status** represents the current state of the task, which is always one of NONE, WAITING, LOADING, PAUSE, ERROR, FINISH. The rest of the internal fields refer to source code comments. + +## How to use + +### Global Configuration + +The following configuration can be initialized at first use: + +```Java +Downloader.getInstance() = downloader; + +// Set up the global download directory, which will be used by default for each task if the directory is not set in the future. If not, the default is the download directory. +String path = Environment.getExternalStorageDirectory().getPath() + "/download/"; +downloader.setFolder(path); + +// Set the number of simultaneous download tasks (default 3). Effective only on the first call +downloader.getThreadPool().setCorePoolSize(3); + +// Add all download task end monitoring +downloader.addOnAllTaskEndListener(listener); + +``` + +### Global Task Operating Ability + +The calling object of the following methods is Downloader.getInstance() + +- startAll():Start all tasks. +- pauseAll():Pause all tasks. +- removeAll()/removeAll(false):Remove all tasks without deleting downloaded files. +- removeAll(true):Remove all tasks and delete downloaded files. +- removeTask():Remove the task with the tag. +- getTaskMap():Get the map of all current download tasks. +- getTask():Get the task with the tag. +- hasTask():Determines whether a task identified as tag exists. + +### Single Task Operating Ability + +The calling object of the following methods is DownloadTask + +- start():Start a task (start a new/paused/failed task). +- pause():Pause a task. +- remove()/remove(false):Remove a task without deleting the downloaded file. +- remove(true):Remove a task and delete the downloaded file. +- restart():Restart a task. The task and file before will be deleted, and then the file will be downloaded again. +- save():Save the data of a task. For more information, see the following: ** Create a new task and start ** + +Some Single Task Configuration-related Approaches + +- folder():Individually specify the download folder for the current task. If not specified, the default download path is ` /storage/emulated/0/download `. +- fileName():Manually specify the name of the downloaded file. It is recommended that you do not specify it yourself, and it will be automatically retrieved. +- extra():An extension field equivalent to a database, providing three extension fields that allow users to save custom data. +- register():The method of registering listeners. Multiple listeners can be registered and take effect simultaneously. When the status changes, each listener receives the notification. + +#### Create a new task and start + +```Java +DownloadTask task = Downloader.request(tag, bucket, objectKey); +``` + +Using this method, downloadTask objects can be created. Accept three parameters, the first parameter is tag, which represents the unique identity of the current task. +As mentioned in the introduction, all download tasks are differentiated by tag, and different tasks must use different tags. +The same download address, if using different tags, will also be considered as two download tasks, different download addresses, such as using the same tag, will also be considered as the same task (leading to breakpoints confusion). + +The start() method cannot be invoked directly to start the task after the task is created using the above method. +All newly created tasks need to call save() method to save progress information before they can call the start method. +If the parameters of a task are modified, such as modifying extra data, downloading folders, etc., the save() method must also be called to save the data. + +Here is a sample code to create a new task and start it: + +```Java +Downloader.request(tag, bucket, objectKey).save().start(); +``` + +### Task Listeners + +Download Listener is used for download listening callbacks. +The downloadListener construction method needs to pass in a tag, which uniquely identifies the current listener. +The main purpose of the tag is to facilitate the cancellation of the listener and prevent data confusion. +The listener has five callback methods, all in the main thread callback. +The onProgress() method is called back not only when the progress changes, but also when the download status changes. Many times, this method is enough to monitor state changes. + +Register a listener please use `task.register(listener);` +Cancel a listener please use `task.unregister(tag);` + +Register a all task end listener please use `Downloader.getInstance().addOnAllTaskEndListener(allTaskEndListener);` 。 +Cancel a all task end listener please use `Downloader.getInstance().removeOnAllTaskEndListener(allTaskEndListener);` 。 + +### DownloadTaskManager + +Information about download tasks is stored in the database. +The Download Task Manager class is a management class that adds, deletes and modifies the database for download tasks. + +If not necessary, please do not use Download Task Manager's API directly to modify the relevant saved data. +The downloader API should be used to operate, so as to ensure the integrity and accuracy of data. + +Here are three commonly used methods: + +```Java +List all = DownloadTaskManager.getInstance().getAll(); +List finished = DownloadTaskManager.getInstance().getFinished(); +List downloading = DownloadTaskManager.getInstance().getDownloading(); +``` + +The methods mentioned above represent obtaining all download records, completed download records and incomplete download records from the database, respectively. +Get a list of Progress objects, and generally need to be used in conjunction with the Downloader method. +That is to say, after obtaining the data, the collection data of the database is restored to the taskMap of Downloader: +`Downloader.restore(DownloadTaskManager.getInstance().getAll());` + + + +The above recovery methods will be used automatically in the initialization method of QingStor SDK Android. + +In this way, the whole task information is stored and restored. + + + +The above instructions on downloader use are all over. +The use of Uploader is almost identical to that of Downloader. + +For more sample information, see [demo](../demo/README.md). diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html new file mode 100644 index 0000000..1cb07e3 --- /dev/null +++ b/docs/allclasses-frame.html @@ -0,0 +1,187 @@ + + + + + + +所有类 (qingstor-sdk-android docs) + + + + + +

所有类

+
+ +
+ + diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html new file mode 100644 index 0000000..f35f4f5 --- /dev/null +++ b/docs/allclasses-noframe.html @@ -0,0 +1,187 @@ + + + + + + +所有类 (qingstor-sdk-android docs) + + + + + +

所有类

+
+ +
+ + diff --git a/docs/com/chengww/qingstor_sdk_android/QingstorHelper.html b/docs/com/chengww/qingstor_sdk_android/QingstorHelper.html new file mode 100644 index 0000000..5094b0a --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/QingstorHelper.html @@ -0,0 +1,359 @@ + + + + + + +QingstorHelper (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android
+

类 QingstorHelper

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.QingstorHelper
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QingstorHelper
    +extends java.lang.Object
    +
    Created by chengww on 2018/12/25.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        REFRESH_TIME

        +
        public static long REFRESH_TIME
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + + + + + +
        +
      • +

        runOnUiThread

        +
        public void runOnUiThread(java.lang.Runnable run)
        +
      • +
      + + + +
        +
      • +

        init

        +
        public QingstorHelper init(android.app.Application context)
        +
        Must call in the Application. If not, download/upload tasks info cannot recorded.
        +
        +
        参数:
        +
        context - Application context
        +
        返回:
        +
        this
        +
        +
      • +
      + + + +
        +
      • +

        getContext

        +
        public android.app.Application getContext()
        +
      • +
      + + + +
        +
      • +

        getDelivery

        +
        public android.os.Handler getDelivery()
        +
      • +
      + + + +
        +
      • +

        handleResponse

        +
        public void handleResponse(OutputModel out)
        +                    throws TaskException
        +
        Handle the response of the sdk. + If status code is error, a TaskException will be thrown. + Else, your request is successful.
        +
        +
        参数:
        +
        out - response
        +
        抛出:
        +
        TaskException - error exception
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/BaseDao.Action.html b/docs/com/chengww/qingstor_sdk_android/db/BaseDao.Action.html new file mode 100644 index 0000000..f39ce0f --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/BaseDao.Action.html @@ -0,0 +1,224 @@ + + + + + + +BaseDao.Action (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.db
+

接口 BaseDao.Action

+
+
+
+
    +
  • +
    +
    封闭类:
    +
    BaseDao<T>
    +
    +
    +
    +
    public static interface BaseDao.Action
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 抽象方法 
      限定符和类型方法和说明
      voidcall(android.database.sqlite.SQLiteDatabase database) 
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        call

        +
        void call(android.database.sqlite.SQLiteDatabase database)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/BaseDao.html b/docs/com/chengww/qingstor_sdk_android/db/BaseDao.html new file mode 100644 index 0000000..acef3eb --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/BaseDao.html @@ -0,0 +1,887 @@ + + + + + + +BaseDao (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.db
+

类 BaseDao<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.db.BaseDao<T>
    • +
    +
  • +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      嵌套类概要

      + + + + + + + + + + +
      嵌套类 
      限定符和类型类和说明
      static interface BaseDao.Action 
      +
    • +
    + +
      +
    • + + +

      字段概要

      + + + + + + + + + + + + + + + + + + +
      字段 
      限定符和类型字段和说明
      protected android.database.sqlite.SQLiteDatabasedatabase 
      protected android.database.sqlite.SQLiteOpenHelperhelper 
      protected static java.lang.StringTAG 
      +
    • +
    + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      BaseDao(android.database.sqlite.SQLiteOpenHelper helper) 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 抽象方法 具体方法 
      限定符和类型方法和说明
      protected voidcloseDatabase(android.database.sqlite.SQLiteDatabase database, + android.database.Cursor cursor) 
      longdelete(android.database.sqlite.SQLiteDatabase database, + java.lang.String whereClause, + java.lang.String[] whereArgs) 
      booleandelete(java.lang.String whereClause, + java.lang.String[] whereArgs) 
      booleandeleteAll() 
      longdeleteAll(android.database.sqlite.SQLiteDatabase database) 
      booleandeleteList(java.util.List<android.util.Pair<java.lang.String,java.lang.String[]>> where) 
      abstract android.content.ContentValuesgetContentValues(T t) 
      abstract java.lang.StringgetTableName() 
      booleaninsert(java.util.List<T> ts) 
      booleaninsert(android.database.sqlite.SQLiteDatabase database, + java.util.List<T> ts) 
      longinsert(android.database.sqlite.SQLiteDatabase database, + T t) 
      booleaninsert(T t) 
      android.database.sqlite.SQLiteDatabaseopenReader() 
      android.database.sqlite.SQLiteDatabaseopenWriter() 
      abstract TparseCursorToBean(android.database.Cursor cursor) 
      java.util.List<T>query(android.database.sqlite.SQLiteDatabase database, + java.lang.String[] columns, + java.lang.String selection, + java.lang.String[] selectionArgs, + java.lang.String groupBy, + java.lang.String having, + java.lang.String orderBy, + java.lang.String limit) 
      java.util.List<T>query(android.database.sqlite.SQLiteDatabase database, + java.lang.String selection, + java.lang.String[] selectionArgs) 
      java.util.List<T>query(java.lang.String[] columns, + java.lang.String selection, + java.lang.String[] selectionArgs, + java.lang.String groupBy, + java.lang.String having, + java.lang.String orderBy, + java.lang.String limit) 
      java.util.List<T>query(java.lang.String selection, + java.lang.String[] selectionArgs) 
      java.util.List<T>queryAll() 
      java.util.List<T>queryAll(android.database.sqlite.SQLiteDatabase database) 
      TqueryOne(android.database.sqlite.SQLiteDatabase database, + java.lang.String selection, + java.lang.String[] selectionArgs) 
      TqueryOne(java.lang.String selection, + java.lang.String[] selectionArgs) 
      booleanreplace(android.content.ContentValues contentValues) 
      booleanreplace(java.util.List<T> ts) 
      longreplace(android.database.sqlite.SQLiteDatabase database, + android.content.ContentValues contentValues) 
      booleanreplace(android.database.sqlite.SQLiteDatabase database, + java.util.List<T> ts) 
      longreplace(android.database.sqlite.SQLiteDatabase database, + T t) 
      booleanreplace(T t) 
      voidstartTransaction(BaseDao.Action action) 
      abstract voidunInit() 
      booleanupdate(android.content.ContentValues contentValues, + java.lang.String whereClause, + java.lang.String[] whereArgs) 
      longupdate(android.database.sqlite.SQLiteDatabase database, + android.content.ContentValues contentValues, + java.lang.String whereClause, + java.lang.String[] whereArgs) 
      longupdate(android.database.sqlite.SQLiteDatabase database, + T t, + java.lang.String whereClause, + java.lang.String[] whereArgs) 
      booleanupdate(T t, + java.lang.String whereClause, + java.lang.String[] whereArgs) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        TAG

        +
        protected static java.lang.String TAG
        +
      • +
      + + + +
        +
      • +

        helper

        +
        protected android.database.sqlite.SQLiteOpenHelper helper
        +
      • +
      + + + +
        +
      • +

        database

        +
        protected android.database.sqlite.SQLiteDatabase database
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        BaseDao

        +
        public BaseDao(android.database.sqlite.SQLiteOpenHelper helper)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        openReader

        +
        public android.database.sqlite.SQLiteDatabase openReader()
        +
      • +
      + + + +
        +
      • +

        openWriter

        +
        public android.database.sqlite.SQLiteDatabase openWriter()
        +
      • +
      + + + +
        +
      • +

        closeDatabase

        +
        protected final void closeDatabase(android.database.sqlite.SQLiteDatabase database,
        +                                   android.database.Cursor cursor)
        +
      • +
      + + + + + +
        +
      • +

        insert

        +
        public boolean insert(T t)
        +
      • +
      + + + + + +
        +
      • +

        insert

        +
        public long insert(android.database.sqlite.SQLiteDatabase database,
        +                   T t)
        +
      • +
      + + + +
        +
      • +

        insert

        +
        public boolean insert(java.util.List<T> ts)
        +
      • +
      + + + +
        +
      • +

        insert

        +
        public boolean insert(android.database.sqlite.SQLiteDatabase database,
        +                      java.util.List<T> ts)
        +
      • +
      + + + +
        +
      • +

        deleteAll

        +
        public boolean deleteAll()
        +
      • +
      + + + +
        +
      • +

        deleteAll

        +
        public long deleteAll(android.database.sqlite.SQLiteDatabase database)
        +
      • +
      + + + +
        +
      • +

        delete

        +
        public boolean delete(java.lang.String whereClause,
        +                      java.lang.String[] whereArgs)
        +
      • +
      + + + +
        +
      • +

        delete

        +
        public long delete(android.database.sqlite.SQLiteDatabase database,
        +                   java.lang.String whereClause,
        +                   java.lang.String[] whereArgs)
        +
      • +
      + + + +
        +
      • +

        deleteList

        +
        public boolean deleteList(java.util.List<android.util.Pair<java.lang.String,java.lang.String[]>> where)
        +
      • +
      + + + + + +
        +
      • +

        replace

        +
        public boolean replace(T t)
        +
      • +
      + + + + + +
        +
      • +

        replace

        +
        public long replace(android.database.sqlite.SQLiteDatabase database,
        +                    T t)
        +
      • +
      + + + +
        +
      • +

        replace

        +
        public boolean replace(android.content.ContentValues contentValues)
        +
      • +
      + + + +
        +
      • +

        replace

        +
        public long replace(android.database.sqlite.SQLiteDatabase database,
        +                    android.content.ContentValues contentValues)
        +
      • +
      + + + +
        +
      • +

        replace

        +
        public boolean replace(java.util.List<T> ts)
        +
      • +
      + + + +
        +
      • +

        replace

        +
        public boolean replace(android.database.sqlite.SQLiteDatabase database,
        +                       java.util.List<T> ts)
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public boolean update(T t,
        +                      java.lang.String whereClause,
        +                      java.lang.String[] whereArgs)
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public long update(android.database.sqlite.SQLiteDatabase database,
        +                   T t,
        +                   java.lang.String whereClause,
        +                   java.lang.String[] whereArgs)
        +
      • +
      + + + +
        +
      • +

        update

        +
        public boolean update(android.content.ContentValues contentValues,
        +                      java.lang.String whereClause,
        +                      java.lang.String[] whereArgs)
        +
      • +
      + + + +
        +
      • +

        update

        +
        public long update(android.database.sqlite.SQLiteDatabase database,
        +                   android.content.ContentValues contentValues,
        +                   java.lang.String whereClause,
        +                   java.lang.String[] whereArgs)
        +
      • +
      + + + +
        +
      • +

        queryAll

        +
        public java.util.List<T> queryAll(android.database.sqlite.SQLiteDatabase database)
        +
      • +
      + + + +
        +
      • +

        query

        +
        public java.util.List<T> query(android.database.sqlite.SQLiteDatabase database,
        +                               java.lang.String selection,
        +                               java.lang.String[] selectionArgs)
        +
      • +
      + + + +
        +
      • +

        queryOne

        +
        public T queryOne(android.database.sqlite.SQLiteDatabase database,
        +                  java.lang.String selection,
        +                  java.lang.String[] selectionArgs)
        +
      • +
      + + + +
        +
      • +

        query

        +
        public java.util.List<T> query(android.database.sqlite.SQLiteDatabase database,
        +                               java.lang.String[] columns,
        +                               java.lang.String selection,
        +                               java.lang.String[] selectionArgs,
        +                               java.lang.String groupBy,
        +                               java.lang.String having,
        +                               java.lang.String orderBy,
        +                               java.lang.String limit)
        +
      • +
      + + + +
        +
      • +

        queryAll

        +
        public java.util.List<T> queryAll()
        +
      • +
      + + + +
        +
      • +

        query

        +
        public java.util.List<T> query(java.lang.String selection,
        +                               java.lang.String[] selectionArgs)
        +
      • +
      + + + +
        +
      • +

        queryOne

        +
        public T queryOne(java.lang.String selection,
        +                  java.lang.String[] selectionArgs)
        +
      • +
      + + + +
        +
      • +

        query

        +
        public java.util.List<T> query(java.lang.String[] columns,
        +                               java.lang.String selection,
        +                               java.lang.String[] selectionArgs,
        +                               java.lang.String groupBy,
        +                               java.lang.String having,
        +                               java.lang.String orderBy,
        +                               java.lang.String limit)
        +
      • +
      + + + +
        +
      • +

        startTransaction

        +
        public void startTransaction(BaseDao.Action action)
        +
      • +
      + + + +
        +
      • +

        getTableName

        +
        public abstract java.lang.String getTableName()
        +
      • +
      + + + +
        +
      • +

        unInit

        +
        public abstract void unInit()
        +
      • +
      + + + +
        +
      • +

        parseCursorToBean

        +
        public abstract T parseCursorToBean(android.database.Cursor cursor)
        +
      • +
      + + + + + +
        +
      • +

        getContentValues

        +
        public abstract android.content.ContentValues getContentValues(T t)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/ColumnEntity.html b/docs/com/chengww/qingstor_sdk_android/db/ColumnEntity.html new file mode 100644 index 0000000..3ac7f59 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/ColumnEntity.html @@ -0,0 +1,390 @@ + + + + + + +ColumnEntity (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.db
+

类 ColumnEntity

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.db.ColumnEntity
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class ColumnEntity
    +extends java.lang.Object
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      构造器概要

      + + + + + + + + + + + + + + + + + +
      构造器 
      构造器和说明
      ColumnEntity(java.lang.String... compositePrimaryKey) 
      ColumnEntity(java.lang.String columnName, + java.lang.String columnType) 
      ColumnEntity(java.lang.String columnName, + java.lang.String columnType, + boolean isPrimary, + boolean isNotNull) 
      ColumnEntity(java.lang.String columnName, + java.lang.String columnType, + boolean isPrimary, + boolean isNotNull, + boolean isAutoincrement) 
      +
    • +
    + +
      +
    • + + +

      方法概要

      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        columnName

        +
        public java.lang.String columnName
        +
      • +
      + + + +
        +
      • +

        columnType

        +
        public java.lang.String columnType
        +
      • +
      + + + +
        +
      • +

        compositePrimaryKey

        +
        public java.lang.String[] compositePrimaryKey
        +
      • +
      + + + +
        +
      • +

        isPrimary

        +
        public boolean isPrimary
        +
      • +
      + + + +
        +
      • +

        isNotNull

        +
        public boolean isNotNull
        +
      • +
      + + + +
        +
      • +

        isAutoincrement

        +
        public boolean isAutoincrement
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ColumnEntity

        +
        public ColumnEntity(java.lang.String... compositePrimaryKey)
        +
      • +
      + + + +
        +
      • +

        ColumnEntity

        +
        public ColumnEntity(java.lang.String columnName,
        +                    java.lang.String columnType)
        +
      • +
      + + + +
        +
      • +

        ColumnEntity

        +
        public ColumnEntity(java.lang.String columnName,
        +                    java.lang.String columnType,
        +                    boolean isPrimary,
        +                    boolean isNotNull)
        +
      • +
      + + + +
        +
      • +

        ColumnEntity

        +
        public ColumnEntity(java.lang.String columnName,
        +                    java.lang.String columnType,
        +                    boolean isPrimary,
        +                    boolean isNotNull,
        +                    boolean isAutoincrement)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/DBUtils.html b/docs/com/chengww/qingstor_sdk_android/db/DBUtils.html new file mode 100644 index 0000000..44ebe01 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/DBUtils.html @@ -0,0 +1,305 @@ + + + + + + +DBUtils (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.db
+

类 DBUtils

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.db.DBUtils
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class DBUtils
    +extends java.lang.Object
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      DBUtils() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 静态方法 具体方法 
      限定符和类型方法和说明
      static booleanisFieldExists(android.database.sqlite.SQLiteDatabase db, + java.lang.String tableName, + java.lang.String fieldName) 
      static booleanisNeedUpgradeTable(android.database.sqlite.SQLiteDatabase db, + TableEntity table) 
      static booleanisTableExists(android.database.sqlite.SQLiteDatabase db, + java.lang.String tableName) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DBUtils

        +
        public DBUtils()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        isNeedUpgradeTable

        +
        public static boolean isNeedUpgradeTable(android.database.sqlite.SQLiteDatabase db,
        +                                         TableEntity table)
        +
      • +
      + + + +
        +
      • +

        isTableExists

        +
        public static boolean isTableExists(android.database.sqlite.SQLiteDatabase db,
        +                                    java.lang.String tableName)
        +
      • +
      + + + +
        +
      • +

        isFieldExists

        +
        public static boolean isFieldExists(android.database.sqlite.SQLiteDatabase db,
        +                                    java.lang.String tableName,
        +                                    java.lang.String fieldName)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/DownloadTaskManager.html b/docs/com/chengww/qingstor_sdk_android/db/DownloadTaskManager.html new file mode 100644 index 0000000..fab6629 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/DownloadTaskManager.html @@ -0,0 +1,453 @@ + + + + + + +DownloadTaskManager (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.db
+

类 DownloadTaskManager

+
+
+ +
+
    +
  • +
    +
    +
    public class DownloadTaskManager
    +extends BaseDao<Progress>
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + + + + + + + + + + + + + + + + + + + + + +
        +
      • +

        get

        +
        public Progress get(java.lang.String tag)
        +
      • +
      + + + +
        +
      • +

        delete

        +
        public void delete(java.lang.String taskKey)
        +
      • +
      + + + +
        +
      • +

        update

        +
        public boolean update(Progress progress)
        +
      • +
      + + + +
        +
      • +

        update

        +
        public boolean update(android.content.ContentValues contentValues,
        +                      java.lang.String tag)
        +
      • +
      + + + +
        +
      • +

        getAll

        +
        public java.util.List<Progress> getAll()
        +
      • +
      + + + +
        +
      • +

        getFinished

        +
        public java.util.List<Progress> getFinished()
        +
      • +
      + + + +
        +
      • +

        getDownloading

        +
        public java.util.List<Progress> getDownloading()
        +
      • +
      + + + +
        +
      • +

        clear

        +
        public boolean clear()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/Progress.Action.html b/docs/com/chengww/qingstor_sdk_android/db/Progress.Action.html new file mode 100644 index 0000000..1d55e67 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/Progress.Action.html @@ -0,0 +1,224 @@ + + + + + + +Progress.Action (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.db
+

接口 Progress.Action

+
+
+
+
    +
  • +
    +
    封闭类:
    +
    Progress
    +
    +
    +
    +
    public static interface Progress.Action
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        call

        +
        void call(Progress progress)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/Progress.html b/docs/com/chengww/qingstor_sdk_android/db/Progress.html new file mode 100644 index 0000000..1edf8d1 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/Progress.html @@ -0,0 +1,1025 @@ + + + + + + +Progress (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.db
+

类 Progress

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.db.Progress
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class Progress
    +extends java.lang.Object
    +implements java.io.Serializable
    +
    +
    另请参阅:
    +
    序列化表格
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        NONE

        +
        public static final int NONE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        WAITING

        +
        public static final int WAITING
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        LOADING

        +
        public static final int LOADING
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PAUSE

        +
        public static final int PAUSE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        ERROR

        +
        public static final int ERROR
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        FINISH

        +
        public static final int FINISH
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        TAG

        +
        public static final java.lang.String TAG
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        BUCKET

        +
        public static final java.lang.String BUCKET
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        OBJECT_KEY

        +
        public static final java.lang.String OBJECT_KEY
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        FOLDER

        +
        public static final java.lang.String FOLDER
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        FILE_PATH

        +
        public static final java.lang.String FILE_PATH
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        FILE_NAME

        +
        public static final java.lang.String FILE_NAME
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        FRACTION

        +
        public static final java.lang.String FRACTION
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        TOTAL_SIZE

        +
        public static final java.lang.String TOTAL_SIZE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        CURRENT_SIZE

        +
        public static final java.lang.String CURRENT_SIZE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        STATUS

        +
        public static final java.lang.String STATUS
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        DATE

        +
        public static final java.lang.String DATE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        EXTRA1

        +
        public static final java.lang.String EXTRA1
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        EXTRA2

        +
        public static final java.lang.String EXTRA2
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        EXTRA3

        +
        public static final java.lang.String EXTRA3
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        RECORDER_BEAN

        +
        public static final java.lang.String RECORDER_BEAN
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        tag

        +
        public java.lang.String tag
        +
      • +
      + + + +
        +
      • +

        myBucket

        +
        public MyBucket myBucket
        +
      • +
      + + + +
        +
      • +

        objectKey

        +
        public java.lang.String objectKey
        +
      • +
      + + + +
        +
      • +

        folder

        +
        public java.lang.String folder
        +
      • +
      + + + +
        +
      • +

        filePath

        +
        public java.lang.String filePath
        +
      • +
      + + + +
        +
      • +

        fileName

        +
        public java.lang.String fileName
        +
      • +
      + + + +
        +
      • +

        fraction

        +
        public float fraction
        +
      • +
      + + + +
        +
      • +

        totalSize

        +
        public long totalSize
        +
      • +
      + + + +
        +
      • +

        currentSize

        +
        public long currentSize
        +
      • +
      + + + +
        +
      • +

        speed

        +
        public transient long speed
        +
      • +
      + + + +
        +
      • +

        status

        +
        public int status
        +
      • +
      + + + +
        +
      • +

        date

        +
        public long date
        +
      • +
      + + + +
        +
      • +

        extra1

        +
        public java.io.Serializable extra1
        +
      • +
      + + + +
        +
      • +

        extra2

        +
        public java.io.Serializable extra2
        +
      • +
      + + + +
        +
      • +

        extra3

        +
        public java.io.Serializable extra3
        +
      • +
      + + + + + + + +
        +
      • +

        recorderBean

        +
        public byte[] recorderBean
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        Progress

        +
        public Progress()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + + + + + + + + + +
        +
      • +

        from

        +
        public void from(Progress progress)
        +
      • +
      + + + +
        +
      • +

        buildContentValues

        +
        public static android.content.ContentValues buildContentValues(Progress progress)
        +
      • +
      + + + +
        +
      • +

        buildUpdateContentValues

        +
        public static android.content.ContentValues buildUpdateContentValues(Progress progress)
        +
      • +
      + + + +
        +
      • +

        parseCursorToBean

        +
        public static Progress parseCursorToBean(android.database.Cursor cursor)
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals(java.lang.Object o)
        +
        +
        覆盖:
        +
        equals 在类中 java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        +
        覆盖:
        +
        hashCode 在类中 java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        +
        覆盖:
        +
        toString 在类中 java.lang.Object
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/TableEntity.html b/docs/com/chengww/qingstor_sdk_android/db/TableEntity.html new file mode 100644 index 0000000..f16ed65 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/TableEntity.html @@ -0,0 +1,359 @@ + + + + + + +TableEntity (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.db
+

类 TableEntity

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.db.TableEntity
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class TableEntity
    +extends java.lang.Object
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段概要

      + + + + + + + + + + +
      字段 
      限定符和类型字段和说明
      java.lang.StringtableName 
      +
    • +
    + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      TableEntity(java.lang.String tableName) 
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        tableName

        +
        public java.lang.String tableName
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        TableEntity

        +
        public TableEntity(java.lang.String tableName)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + + + + + +
        +
      • +

        buildTableString

        +
        public java.lang.String buildTableString()
        +
      • +
      + + + +
        +
      • +

        getColumnName

        +
        public java.lang.String getColumnName(int columnIndex)
        +
      • +
      + + + +
        +
      • +

        getColumnCount

        +
        public int getColumnCount()
        +
      • +
      + + + +
        +
      • +

        getColumnIndex

        +
        public int getColumnIndex(java.lang.String columnName)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/UploadTaskManager.html b/docs/com/chengww/qingstor_sdk_android/db/UploadTaskManager.html new file mode 100644 index 0000000..7557a82 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/UploadTaskManager.html @@ -0,0 +1,453 @@ + + + + + + +UploadTaskManager (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.db
+

类 UploadTaskManager

+
+
+ +
+
    +
  • +
    +
    +
    public class UploadTaskManager
    +extends BaseDao<Progress>
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + + + + + + + + + + + + + + + + + + + + + +
        +
      • +

        get

        +
        public Progress get(java.lang.String tag)
        +
      • +
      + + + +
        +
      • +

        delete

        +
        public void delete(java.lang.String taskKey)
        +
      • +
      + + + +
        +
      • +

        update

        +
        public boolean update(Progress progress)
        +
      • +
      + + + +
        +
      • +

        update

        +
        public boolean update(android.content.ContentValues contentValues,
        +                      java.lang.String tag)
        +
      • +
      + + + +
        +
      • +

        getAll

        +
        public java.util.List<Progress> getAll()
        +
      • +
      + + + +
        +
      • +

        getFinished

        +
        public java.util.List<Progress> getFinished()
        +
      • +
      + + + +
        +
      • +

        getUploading

        +
        public java.util.List<Progress> getUploading()
        +
      • +
      + + + +
        +
      • +

        clear

        +
        public boolean clear()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/package-frame.html b/docs/com/chengww/qingstor_sdk_android/db/package-frame.html new file mode 100644 index 0000000..8d7d99b --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/package-frame.html @@ -0,0 +1,33 @@ + + + + + + +com.chengww.qingstor_sdk_android.db (qingstor-sdk-android docs) + + + + + +

com.chengww.qingstor_sdk_android.db

+ + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/package-summary.html b/docs/com/chengww/qingstor_sdk_android/db/package-summary.html new file mode 100644 index 0000000..5397ca2 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/package-summary.html @@ -0,0 +1,200 @@ + + + + + + +com.chengww.qingstor_sdk_android.db (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.chengww.qingstor_sdk_android.db

+
+
+ +
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/db/package-tree.html b/docs/com/chengww/qingstor_sdk_android/db/package-tree.html new file mode 100644 index 0000000..1158040 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/db/package-tree.html @@ -0,0 +1,151 @@ + + + + + + +com.chengww.qingstor_sdk_android.db 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.chengww.qingstor_sdk_android.db的分层结构

+程序包分层结构: + +
+
+

类分层结构

+
    +
  • java.lang.Object +
      +
    • com.chengww.qingstor_sdk_android.db.BaseDao<T> + +
    • +
    • com.chengww.qingstor_sdk_android.db.ColumnEntity
    • +
    • com.chengww.qingstor_sdk_android.db.DBUtils
    • +
    • com.chengww.qingstor_sdk_android.db.MyBucket (implements java.io.Serializable)
    • +
    • com.chengww.qingstor_sdk_android.db.Progress (implements java.io.Serializable)
    • +
    • com.chengww.qingstor_sdk_android.db.TableEntity
    • +
    +
  • +
+

接口分层结构

+ +
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/exception/TaskException.html b/docs/com/chengww/qingstor_sdk_android/exception/TaskException.html new file mode 100644 index 0000000..fb878b0 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/exception/TaskException.html @@ -0,0 +1,562 @@ + + + + + + +TaskException (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.exception
+

类 TaskException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • com.chengww.qingstor_sdk_android.exception.TaskException
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class TaskException
    +extends java.lang.Exception
    +
    Created by chengww on 2018/12/28.
    +
    +
    另请参阅:
    +
    序列化表格
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        TaskException

        +
        public TaskException(java.lang.String message)
        +
      • +
      + + + +
        +
      • +

        TaskException

        +
        public TaskException(OutputModel outputModel)
        +
      • +
      + + + +
        +
      • +

        TaskException

        +
        public TaskException(QSException e)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getMessage

        +
        public java.lang.String getMessage()
        +
        +
        覆盖:
        +
        getMessage 在类中 java.lang.Throwable
        +
        +
      • +
      + + + +
        +
      • +

        BREAKPOINT_NOT_EXIST

        +
        public static TaskException BREAKPOINT_NOT_EXIST()
        +
      • +
      + + + +
        +
      • +

        BREAKPOINT_EXPIRED

        +
        public static TaskException BREAKPOINT_EXPIRED()
        +
      • +
      + + + +
        +
      • +

        FILE_INVALID

        +
        public static TaskException FILE_INVALID(java.lang.String message)
        +
      • +
      + + + +
        +
      • +

        NOT_AVAILABLE

        +
        public static TaskException NOT_AVAILABLE()
        +
      • +
      + + + + + + + +
        +
      • +

        IO_EXCEPTION

        +
        public static TaskException IO_EXCEPTION(java.io.IOException e)
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        +
        覆盖:
        +
        toString 在类中 java.lang.Throwable
        +
        +
      • +
      + + + +
        +
      • +

        getStatusCode

        +
        public int getStatusCode()
        +
      • +
      + + + +
        +
      • +

        setStatusCode

        +
        public void setStatusCode(int statusCode)
        +
      • +
      + + + +
        +
      • +

        getCode

        +
        public java.lang.String getCode()
        +
      • +
      + + + +
        +
      • +

        setCode

        +
        public void setCode(java.lang.String code)
        +
      • +
      + + + +
        +
      • +

        setMessage

        +
        public void setMessage(java.lang.String message)
        +
      • +
      + + + +
        +
      • +

        getRequestID

        +
        public java.lang.String getRequestID()
        +
      • +
      + + + +
        +
      • +

        setRequestID

        +
        public void setRequestID(java.lang.String requestID)
        +
      • +
      + + + +
        +
      • +

        getHelpUrl

        +
        public java.lang.String getHelpUrl()
        +
      • +
      + + + +
        +
      • +

        setHelpUrl

        +
        public void setHelpUrl(java.lang.String helpUrl)
        +
      • +
      + + + +
        +
      • +

        getI18nHint

        +
        public java.lang.String getI18nHint()
        +
      • +
      + + + +
        +
      • +

        setI18nHint

        +
        public void setI18nHint(java.lang.String i18nHint)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/exception/package-frame.html b/docs/com/chengww/qingstor_sdk_android/exception/package-frame.html new file mode 100644 index 0000000..07f5c61 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/exception/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.chengww.qingstor_sdk_android.exception (qingstor-sdk-android docs) + + + + + +

com.chengww.qingstor_sdk_android.exception

+
+

异常错误

+ +
+ + diff --git a/docs/com/chengww/qingstor_sdk_android/exception/package-summary.html b/docs/com/chengww/qingstor_sdk_android/exception/package-summary.html new file mode 100644 index 0000000..73e07ce --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/exception/package-summary.html @@ -0,0 +1,143 @@ + + + + + + +com.chengww.qingstor_sdk_android.exception (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.chengww.qingstor_sdk_android.exception

+
+
+
    +
  • + + + + + + + + + + + + +
    异常错误概要 
    异常错误说明
    TaskException +
    Created by chengww on 2018/12/28.
    +
    +
  • +
+
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/exception/package-tree.html b/docs/com/chengww/qingstor_sdk_android/exception/package-tree.html new file mode 100644 index 0000000..a14e737 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/exception/package-tree.html @@ -0,0 +1,144 @@ + + + + + + +com.chengww.qingstor_sdk_android.exception 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.chengww.qingstor_sdk_android.exception的分层结构

+程序包分层结构: + +
+
+

类分层结构

+
    +
  • java.lang.Object +
      +
    • java.lang.Throwable (implements java.io.Serializable) +
        +
      • java.lang.Exception + +
      • +
      +
    • +
    +
  • +
+
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/listener/DownloadListener.html b/docs/com/chengww/qingstor_sdk_android/listener/DownloadListener.html new file mode 100644 index 0000000..b0bcf35 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/listener/DownloadListener.html @@ -0,0 +1,285 @@ + + + + + + +DownloadListener (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.listener
+

类 DownloadListener

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.listener.DownloadListener
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    ProgressListener<java.io.File>
    +
    +
    +
    +
    public abstract class DownloadListener
    +extends java.lang.Object
    +implements ProgressListener<java.io.File>
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段概要

      + + + + + + + + + + +
      字段 
      限定符和类型字段和说明
      java.lang.Objecttag 
      +
    • +
    + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      DownloadListener(java.lang.Object tag) 
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        tag

        +
        public final java.lang.Object tag
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DownloadListener

        +
        public DownloadListener(java.lang.Object tag)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/listener/ProgressListener.html b/docs/com/chengww/qingstor_sdk_android/listener/ProgressListener.html new file mode 100644 index 0000000..bc661cb --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/listener/ProgressListener.html @@ -0,0 +1,281 @@ + + + + + + +ProgressListener (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.listener
+

接口 ProgressListener<T>

+
+
+
+ +
+
+ +
+
+
    +
  • + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/listener/UploadListener.html b/docs/com/chengww/qingstor_sdk_android/listener/UploadListener.html new file mode 100644 index 0000000..500156c --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/listener/UploadListener.html @@ -0,0 +1,285 @@ + + + + + + +UploadListener (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.listener
+

类 UploadListener<String>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.listener.UploadListener<String>
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    ProgressListener<String>
    +
    +
    +
    +
    public abstract class UploadListener<String>
    +extends java.lang.Object
    +implements ProgressListener<String>
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段概要

      + + + + + + + + + + +
      字段 
      限定符和类型字段和说明
      java.lang.Objecttag 
      +
    • +
    + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      UploadListener(java.lang.Object tag) 
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        tag

        +
        public final java.lang.Object tag
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        UploadListener

        +
        public UploadListener(java.lang.Object tag)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/listener/package-frame.html b/docs/com/chengww/qingstor_sdk_android/listener/package-frame.html new file mode 100644 index 0000000..4342256 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/listener/package-frame.html @@ -0,0 +1,26 @@ + + + + + + +com.chengww.qingstor_sdk_android.listener (qingstor-sdk-android docs) + + + + + +

com.chengww.qingstor_sdk_android.listener

+ + + diff --git a/docs/com/chengww/qingstor_sdk_android/listener/package-summary.html b/docs/com/chengww/qingstor_sdk_android/listener/package-summary.html new file mode 100644 index 0000000..3218b33 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/listener/package-summary.html @@ -0,0 +1,166 @@ + + + + + + +com.chengww.qingstor_sdk_android.listener (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.chengww.qingstor_sdk_android.listener

+
+
+
    +
  • + + + + + + + + + + + + +
    接口概要 
    接口说明
    ProgressListener<T> +
    Created by chengww on 2018/12/28.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + +
    类概要 
    说明
    DownloadListener +
    Created by chengww on 2018/12/28.
    +
    UploadListener<String> +
    Created by chengww on 2018/12/28.
    +
    +
  • +
+
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/listener/package-tree.html b/docs/com/chengww/qingstor_sdk_android/listener/package-tree.html new file mode 100644 index 0000000..b268e93 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/listener/package-tree.html @@ -0,0 +1,141 @@ + + + + + + +com.chengww.qingstor_sdk_android.listener 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.chengww.qingstor_sdk_android.listener的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +

接口分层结构

+ +
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/package-frame.html b/docs/com/chengww/qingstor_sdk_android/package-frame.html new file mode 100644 index 0000000..83406b4 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.chengww.qingstor_sdk_android (qingstor-sdk-android docs) + + + + + +

com.chengww.qingstor_sdk_android

+
+

+ +
+ + diff --git a/docs/com/chengww/qingstor_sdk_android/package-summary.html b/docs/com/chengww/qingstor_sdk_android/package-summary.html new file mode 100644 index 0000000..6bf11a4 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/package-summary.html @@ -0,0 +1,143 @@ + + + + + + +com.chengww.qingstor_sdk_android (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.chengww.qingstor_sdk_android

+
+
+
    +
  • + + + + + + + + + + + + +
    类概要 
    说明
    QingstorHelper +
    Created by chengww on 2018/12/25.
    +
    +
  • +
+
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/package-tree.html b/docs/com/chengww/qingstor_sdk_android/package-tree.html new file mode 100644 index 0000000..64f933b --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/package-tree.html @@ -0,0 +1,136 @@ + + + + + + +com.chengww.qingstor_sdk_android 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.chengww.qingstor_sdk_android的分层结构

+程序包分层结构: + +
+
+

类分层结构

+
    +
  • java.lang.Object + +
  • +
+
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/recorder/DBBeanRecorder.html b/docs/com/chengww/qingstor_sdk_android/recorder/DBBeanRecorder.html new file mode 100644 index 0000000..b28e625 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/recorder/DBBeanRecorder.html @@ -0,0 +1,337 @@ + + + + + + +DBBeanRecorder (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.recorder
+

类 DBBeanRecorder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.recorder.DBBeanRecorder
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    Recorder
    +
    +
    +
    +
    public class DBBeanRecorder
    +extends java.lang.Object
    +implements Recorder
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      voiddel(java.lang.String key) +
      Delete the info of progress of multi uploads.
      +
      byte[]get(java.lang.String key) +
      Get the info of progress of multi uploads.
      +
      voidset(java.lang.String key, + byte[] data) +
      Set a new or updated progress of multi uploads.
      +
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DBBeanRecorder

        +
        public DBBeanRecorder(Progress progress)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        set

        +
        public void set(java.lang.String key,
        +                byte[] data)
        +
        从接口复制的说明: Recorder
        +
        Set a new or updated progress of multi uploads.
        +
        +
        指定者:
        +
        set 在接口中 Recorder
        +
        参数:
        +
        key - key recorded in the upload.
        +
        data - data recorded in the upload.
        +
        +
      • +
      + + + +
        +
      • +

        get

        +
        public byte[] get(java.lang.String key)
        +
        从接口复制的说明: Recorder
        +
        Get the info of progress of multi uploads.
        +
        +
        指定者:
        +
        get 在接口中 Recorder
        +
        参数:
        +
        key - key recorded in the upload.
        +
        返回:
        +
        info of progress.
        +
        +
      • +
      + + + +
        +
      • +

        del

        +
        public void del(java.lang.String key)
        +
        从接口复制的说明: Recorder
        +
        Delete the info of progress of multi uploads.
        +
        +
        指定者:
        +
        del 在接口中 Recorder
        +
        参数:
        +
        key - key recorded in the upload.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/recorder/package-frame.html b/docs/com/chengww/qingstor_sdk_android/recorder/package-frame.html new file mode 100644 index 0000000..e18535f --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/recorder/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.chengww.qingstor_sdk_android.recorder (qingstor-sdk-android docs) + + + + + +

com.chengww.qingstor_sdk_android.recorder

+
+

+ +
+ + diff --git a/docs/com/chengww/qingstor_sdk_android/recorder/package-summary.html b/docs/com/chengww/qingstor_sdk_android/recorder/package-summary.html new file mode 100644 index 0000000..fc7cf2f --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/recorder/package-summary.html @@ -0,0 +1,143 @@ + + + + + + +com.chengww.qingstor_sdk_android.recorder (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.chengww.qingstor_sdk_android.recorder

+
+
+
    +
  • + + + + + + + + + + + + +
    类概要 
    说明
    DBBeanRecorder +
    Created by chengww on 2018/12/28.
    +
    +
  • +
+
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/recorder/package-tree.html b/docs/com/chengww/qingstor_sdk_android/recorder/package-tree.html new file mode 100644 index 0000000..2e74b92 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/recorder/package-tree.html @@ -0,0 +1,136 @@ + + + + + + +com.chengww.qingstor_sdk_android.recorder 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.chengww.qingstor_sdk_android.recorder的分层结构

+程序包分层结构: + +
+
+

类分层结构

+
    +
  • java.lang.Object + +
  • +
+
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/DownloadTask.html b/docs/com/chengww/qingstor_sdk_android/task/DownloadTask.html new file mode 100644 index 0000000..2ddd1e8 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/DownloadTask.html @@ -0,0 +1,553 @@ + + + + + + +DownloadTask (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.task
+

类 DownloadTask

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.task.DownloadTask
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    java.lang.Comparable, java.lang.Runnable
    +
    +
    +
    +
    public class DownloadTask
    +extends java.lang.Object
    +implements java.lang.Comparable, java.lang.Runnable
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DownloadTask

        +
        public DownloadTask(java.lang.String tag,
        +                    Bucket bucket,
        +                    java.lang.String objectKey)
        +
      • +
      + + + +
        +
      • +

        DownloadTask

        +
        public DownloadTask(Progress progress)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        folder

        +
        public DownloadTask folder(java.lang.String folder)
        +
      • +
      + + + +
        +
      • +

        fileName

        +
        public DownloadTask fileName(java.lang.String fileName)
        +
      • +
      + + + +
        +
      • +

        extra1

        +
        public DownloadTask extra1(java.io.Serializable extra1)
        +
      • +
      + + + +
        +
      • +

        extra2

        +
        public DownloadTask extra2(java.io.Serializable extra2)
        +
      • +
      + + + +
        +
      • +

        extra3

        +
        public DownloadTask extra3(java.io.Serializable extra3)
        +
      • +
      + + + + + + + + + + + + + + + +
        +
      • +

        unRegister

        +
        public void unRegister(java.lang.String tag)
        +
      • +
      + + + +
        +
      • +

        start

        +
        public void start()
        +
      • +
      + + + +
        +
      • +

        restart

        +
        public void restart()
        +
      • +
      + + + +
        +
      • +

        pause

        +
        public void pause()
        +
        暂停的方法
        +
      • +
      + + + +
        +
      • +

        remove

        +
        public void remove()
        +
        删除一个任务,会删除下载文件
        +
      • +
      + + + +
        +
      • +

        remove

        +
        public DownloadTask remove(boolean isDeleteFile)
        +
        删除一个任务,会删除下载文件
        +
      • +
      + + + +
        +
      • +

        run

        +
        public void run()
        +
        +
        指定者:
        +
        run 在接口中 java.lang.Runnable
        +
        +
      • +
      + + + +
        +
      • +

        compareTo

        +
        public int compareTo(java.lang.Object o)
        +
        +
        指定者:
        +
        compareTo 在接口中 java.lang.Comparable
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/DownloadThreadPool.html b/docs/com/chengww/qingstor_sdk_android/task/DownloadThreadPool.html new file mode 100644 index 0000000..4b603cf --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/DownloadThreadPool.html @@ -0,0 +1,313 @@ + + + + + + +DownloadThreadPool (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.task
+

类 DownloadThreadPool

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.task.DownloadThreadPool
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class DownloadThreadPool
    +extends java.lang.Object
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      voidexecute(java.lang.Runnable runnable) 
      XExecutorgetExecutor() 
      voidremove(java.lang.Runnable runnable) 
      voidsetCorePoolSize(int corePoolSize) +
      Must set this before first execute. corePoolSize = 1 - 5
      +
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DownloadThreadPool

        +
        public DownloadThreadPool()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getExecutor

        +
        public XExecutor getExecutor()
        +
      • +
      + + + +
        +
      • +

        setCorePoolSize

        +
        public void setCorePoolSize(int corePoolSize)
        +
        Must set this before first execute. corePoolSize = 1 - 5
        +
      • +
      + + + +
        +
      • +

        execute

        +
        public void execute(java.lang.Runnable runnable)
        +
      • +
      + + + +
        +
      • +

        remove

        +
        public void remove(java.lang.Runnable runnable)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/Downloader.html b/docs/com/chengww/qingstor_sdk_android/task/Downloader.html new file mode 100644 index 0000000..4fcfe1d --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/Downloader.html @@ -0,0 +1,501 @@ + + + + + + +Downloader (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.task
+

类 Downloader

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.task.Downloader
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class Downloader
    +extends java.lang.Object
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        TAG

        +
        public static final java.lang.String TAG
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getInstance

        +
        public static Downloader getInstance()
        +
      • +
      + + + +
        +
      • +

        request

        +
        public static DownloadTask request(java.lang.String tag,
        +                                   Bucket bucket,
        +                                   java.lang.String objectKey)
        +
      • +
      + + + + + + + +
        +
      • +

        restore

        +
        public static java.util.List<DownloadTask> restore(java.util.List<Progress> progressList)
        +
      • +
      + + + +
        +
      • +

        startAll

        +
        public void startAll()
        +
      • +
      + + + +
        +
      • +

        pauseAll

        +
        public void pauseAll()
        +
        暂停全部任务
        +
      • +
      + + + +
        +
      • +

        removeAll

        +
        public void removeAll()
        +
      • +
      + + + +
        +
      • +

        removeAll

        +
        public void removeAll(boolean isDeleteFile)
        +
        Delete all tasks + 删除所有任务
        +
        +
        参数:
        +
        isDeleteFile - Whether to delete files when deleting tasks 删除任务时是否删除文件
        +
        +
      • +
      + + + +
        +
      • +

        getFolder

        +
        public java.lang.String getFolder()
        +
      • +
      + + + +
        +
      • +

        setFolder

        +
        public Downloader setFolder(java.lang.String folder)
        +
      • +
      + + + + + + + +
        +
      • +

        getTaskMap

        +
        public java.util.Map<java.lang.String,DownloadTask> getTaskMap()
        +
      • +
      + + + +
        +
      • +

        getTask

        +
        public DownloadTask getTask(java.lang.String tag)
        +
      • +
      + + + +
        +
      • +

        hasTask

        +
        public boolean hasTask(java.lang.String tag)
        +
      • +
      + + + +
        +
      • +

        removeTask

        +
        public DownloadTask removeTask(java.lang.String tag)
        +
      • +
      + + + + + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/UploadTask.html b/docs/com/chengww/qingstor_sdk_android/task/UploadTask.html new file mode 100644 index 0000000..5bff048 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/UploadTask.html @@ -0,0 +1,552 @@ + + + + + + +UploadTask (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.task
+

类 UploadTask<String>

+
+
+ +
+ +
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        UploadTask

        +
        public UploadTask(java.lang.String tag,
        +                  Bucket bucket,
        +                  java.lang.String objectKey,
        +                  java.lang.String filePath)
        +
      • +
      + + + +
        +
      • +

        UploadTask

        +
        public UploadTask(Progress progress)
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/UploadThreadPool.html b/docs/com/chengww/qingstor_sdk_android/task/UploadThreadPool.html new file mode 100644 index 0000000..0441ce0 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/UploadThreadPool.html @@ -0,0 +1,313 @@ + + + + + + +UploadThreadPool (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.task
+

类 UploadThreadPool

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.task.UploadThreadPool
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class UploadThreadPool
    +extends java.lang.Object
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      voidexecute(java.lang.Runnable runnable) 
      XExecutorgetExecutor() 
      voidremove(java.lang.Runnable runnable) 
      voidsetCorePoolSize(int corePoolSize) +
      Must set this before first execute. corePoolSize = 1 - 5
      +
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        UploadThreadPool

        +
        public UploadThreadPool()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getExecutor

        +
        public XExecutor getExecutor()
        +
      • +
      + + + +
        +
      • +

        setCorePoolSize

        +
        public void setCorePoolSize(int corePoolSize)
        +
        Must set this before first execute. corePoolSize = 1 - 5
        +
      • +
      + + + +
        +
      • +

        execute

        +
        public void execute(java.lang.Runnable runnable)
        +
      • +
      + + + +
        +
      • +

        remove

        +
        public void remove(java.lang.Runnable runnable)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/Uploader.html b/docs/com/chengww/qingstor_sdk_android/task/Uploader.html new file mode 100644 index 0000000..330826a --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/Uploader.html @@ -0,0 +1,458 @@ + + + + + + +Uploader (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.task
+

类 Uploader

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.task.Uploader
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class Uploader
    +extends java.lang.Object
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        TAG

        +
        public static final java.lang.String TAG
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getInstance

        +
        public static Uploader getInstance()
        +
      • +
      + + + +
        +
      • +

        request

        +
        public static <T> UploadTask<T> request(java.lang.String tag,
        +                                        Bucket bucket,
        +                                        java.lang.String objectKey,
        +                                        java.lang.String filePath)
        +
      • +
      + + + +
        +
      • +

        restore

        +
        public static <T> UploadTask<T> restore(Progress progress)
        +
        Restore tasks form database 从数据库中恢复任务
        +
      • +
      + + + +
        +
      • +

        restore

        +
        public static java.util.List<UploadTask<?>> restore(java.util.List<Progress> progressList)
        +
        Restore tasks form database 从数据库中恢复任务
        +
      • +
      + + + +
        +
      • +

        startAll

        +
        public void startAll()
        +
      • +
      + + + +
        +
      • +

        pauseAll

        +
        public void pauseAll()
        +
      • +
      + + + +
        +
      • +

        removeAll

        +
        public void removeAll()
        +
      • +
      + + + + + + + +
        +
      • +

        getTaskMap

        +
        public java.util.Map<java.lang.String,UploadTask<?>> getTaskMap()
        +
      • +
      + + + +
        +
      • +

        getTask

        +
        public UploadTask<?> getTask(java.lang.String tag)
        +
      • +
      + + + +
        +
      • +

        hasTask

        +
        public boolean hasTask(java.lang.String tag)
        +
      • +
      + + + +
        +
      • +

        removeTask

        +
        public UploadTask<?> removeTask(java.lang.String tag)
        +
      • +
      + + + + + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/XExecutor.OnAllTaskEndListener.html b/docs/com/chengww/qingstor_sdk_android/task/XExecutor.OnAllTaskEndListener.html new file mode 100644 index 0000000..2bd6d33 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/XExecutor.OnAllTaskEndListener.html @@ -0,0 +1,224 @@ + + + + + + +XExecutor.OnAllTaskEndListener (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.task
+

接口 XExecutor.OnAllTaskEndListener

+
+
+
+
    +
  • +
    +
    封闭类:
    +
    XExecutor
    +
    +
    +
    +
    public static interface XExecutor.OnAllTaskEndListener
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        onAllTaskEnd

        +
        void onAllTaskEnd()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/XExecutor.OnTaskEndListener.html b/docs/com/chengww/qingstor_sdk_android/task/XExecutor.OnTaskEndListener.html new file mode 100644 index 0000000..850b810 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/XExecutor.OnTaskEndListener.html @@ -0,0 +1,224 @@ + + + + + + +XExecutor.OnTaskEndListener (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.task
+

接口 XExecutor.OnTaskEndListener

+
+
+
+
    +
  • +
    +
    封闭类:
    +
    XExecutor
    +
    +
    +
    +
    public static interface XExecutor.OnTaskEndListener
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        onTaskEnd

        +
        void onTaskEnd(java.lang.Runnable r)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/XExecutor.html b/docs/com/chengww/qingstor_sdk_android/task/XExecutor.html new file mode 100644 index 0000000..541faa6 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/XExecutor.html @@ -0,0 +1,462 @@ + + + + + + +XExecutor (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.task
+

类 XExecutor

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.util.concurrent.AbstractExecutorService
    • +
    • +
        +
      • java.util.concurrent.ThreadPoolExecutor
      • +
      • +
          +
        • com.chengww.qingstor_sdk_android.task.XExecutor
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    java.util.concurrent.Executor, java.util.concurrent.ExecutorService
    +
    +
    +
    +
    public class XExecutor
    +extends java.util.concurrent.ThreadPoolExecutor
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      嵌套类概要

      + + + + + + + + + + + + + + +
      嵌套类 
      限定符和类型类和说明
      static interface XExecutor.OnAllTaskEndListener 
      static interface XExecutor.OnTaskEndListener 
      +
        +
      • + + +

        从类继承的嵌套类/接口 java.util.concurrent.ThreadPoolExecutor

        +java.util.concurrent.ThreadPoolExecutor.AbortPolicy, java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy, java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy, java.util.concurrent.ThreadPoolExecutor.DiscardPolicy
      • +
      +
    • +
    + +
      +
    • + + +

      构造器概要

      + + + + + + + + + + + + + + + + + +
      构造器 
      构造器和说明
      XExecutor(int corePoolSize, + int maximumPoolSize, + long keepAliveTime, + java.util.concurrent.TimeUnit unit, + java.util.concurrent.BlockingQueue<java.lang.Runnable> workQueue) 
      XExecutor(int corePoolSize, + int maximumPoolSize, + long keepAliveTime, + java.util.concurrent.TimeUnit unit, + java.util.concurrent.BlockingQueue<java.lang.Runnable> workQueue, + java.util.concurrent.RejectedExecutionHandler handler) 
      XExecutor(int corePoolSize, + int maximumPoolSize, + long keepAliveTime, + java.util.concurrent.TimeUnit unit, + java.util.concurrent.BlockingQueue<java.lang.Runnable> workQueue, + java.util.concurrent.ThreadFactory threadFactory) 
      XExecutor(int corePoolSize, + int maximumPoolSize, + long keepAliveTime, + java.util.concurrent.TimeUnit unit, + java.util.concurrent.BlockingQueue<java.lang.Runnable> workQueue, + java.util.concurrent.ThreadFactory threadFactory, + java.util.concurrent.RejectedExecutionHandler handler) 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      voidaddOnAllTaskEndListener(XExecutor.OnAllTaskEndListener allTaskEndListener) 
      voidaddOnTaskEndListener(XExecutor.OnTaskEndListener taskEndListener) 
      protected voidafterExecute(java.lang.Runnable r, + java.lang.Throwable t) 
      voidremoveOnAllTaskEndListener(XExecutor.OnAllTaskEndListener allTaskEndListener) 
      voidremoveOnTaskEndListener(XExecutor.OnTaskEndListener taskEndListener) 
      +
        +
      • + + +

        从类继承的方法 java.util.concurrent.ThreadPoolExecutor

        +allowCoreThreadTimeOut, allowsCoreThreadTimeOut, awaitTermination, beforeExecute, execute, finalize, getActiveCount, getCompletedTaskCount, getCorePoolSize, getKeepAliveTime, getLargestPoolSize, getMaximumPoolSize, getPoolSize, getQueue, getRejectedExecutionHandler, getTaskCount, getThreadFactory, isShutdown, isTerminated, isTerminating, prestartAllCoreThreads, prestartCoreThread, purge, remove, setCorePoolSize, setKeepAliveTime, setMaximumPoolSize, setRejectedExecutionHandler, setThreadFactory, shutdown, shutdownNow, terminated, toString
      • +
      +
        +
      • + + +

        从类继承的方法 java.util.concurrent.AbstractExecutorService

        +invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor, submit, submit, submit
      • +
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        XExecutor

        +
        public XExecutor(int corePoolSize,
        +                 int maximumPoolSize,
        +                 long keepAliveTime,
        +                 java.util.concurrent.TimeUnit unit,
        +                 java.util.concurrent.BlockingQueue<java.lang.Runnable> workQueue,
        +                 java.util.concurrent.RejectedExecutionHandler handler)
        +
      • +
      + + + +
        +
      • +

        XExecutor

        +
        public XExecutor(int corePoolSize,
        +                 int maximumPoolSize,
        +                 long keepAliveTime,
        +                 java.util.concurrent.TimeUnit unit,
        +                 java.util.concurrent.BlockingQueue<java.lang.Runnable> workQueue,
        +                 java.util.concurrent.ThreadFactory threadFactory,
        +                 java.util.concurrent.RejectedExecutionHandler handler)
        +
      • +
      + + + +
        +
      • +

        XExecutor

        +
        public XExecutor(int corePoolSize,
        +                 int maximumPoolSize,
        +                 long keepAliveTime,
        +                 java.util.concurrent.TimeUnit unit,
        +                 java.util.concurrent.BlockingQueue<java.lang.Runnable> workQueue,
        +                 java.util.concurrent.ThreadFactory threadFactory)
        +
      • +
      + + + +
        +
      • +

        XExecutor

        +
        public XExecutor(int corePoolSize,
        +                 int maximumPoolSize,
        +                 long keepAliveTime,
        +                 java.util.concurrent.TimeUnit unit,
        +                 java.util.concurrent.BlockingQueue<java.lang.Runnable> workQueue)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        afterExecute

        +
        protected void afterExecute(java.lang.Runnable r,
        +                            java.lang.Throwable t)
        +
        +
        覆盖:
        +
        afterExecute 在类中 java.util.concurrent.ThreadPoolExecutor
        +
        +
      • +
      + + + + + + + + + + + + + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/package-frame.html b/docs/com/chengww/qingstor_sdk_android/task/package-frame.html new file mode 100644 index 0000000..e3be5b2 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/package-frame.html @@ -0,0 +1,36 @@ + + + + + + +com.chengww.qingstor_sdk_android.task (qingstor-sdk-android docs) + + + + + +

com.chengww.qingstor_sdk_android.task

+ + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/package-summary.html b/docs/com/chengww/qingstor_sdk_android/task/package-summary.html new file mode 100644 index 0000000..90e27f4 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/package-summary.html @@ -0,0 +1,220 @@ + + + + + + +com.chengww.qingstor_sdk_android.task (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.chengww.qingstor_sdk_android.task

+
+
+ +
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/task/package-tree.html b/docs/com/chengww/qingstor_sdk_android/task/package-tree.html new file mode 100644 index 0000000..e5cce5f --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/task/package-tree.html @@ -0,0 +1,174 @@ + + + + + + +com.chengww.qingstor_sdk_android.task 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.chengww.qingstor_sdk_android.task的分层结构

+程序包分层结构: + +
+
+

类分层结构

+
    +
  • java.lang.Object +
      +
    • java.util.AbstractCollection<E> (implements java.util.Collection<E>) +
        +
      • java.util.AbstractQueue<E> (implements java.util.Queue<E>) +
          +
        • com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue<E> (implements java.util.concurrent.BlockingQueue<E>, java.io.Serializable)
        • +
        +
      • +
      +
    • +
    • java.util.concurrent.AbstractExecutorService (implements java.util.concurrent.ExecutorService) +
        +
      • java.util.concurrent.ThreadPoolExecutor +
          +
        • com.chengww.qingstor_sdk_android.task.XExecutor
        • +
        +
      • +
      +
    • +
    • com.chengww.qingstor_sdk_android.task.Downloader
    • +
    • com.chengww.qingstor_sdk_android.task.DownloadTask (implements java.lang.Comparable<T>, java.lang.Runnable)
    • +
    • com.chengww.qingstor_sdk_android.task.DownloadThreadPool
    • +
    • com.chengww.qingstor_sdk_android.task.MyCancellationHandler (implements com.qingstor.sdk.request.CancellationHandler)
    • +
    • com.chengww.qingstor_sdk_android.task.PriorityObject<E> +
        +
      • com.chengww.qingstor_sdk_android.task.PriorityRunnable (implements java.lang.Comparable<T>, java.lang.Runnable)
      • +
      +
    • +
    • com.chengww.qingstor_sdk_android.task.Uploader
    • +
    • com.qingstor.sdk.upload.UploadManagerCallback<O> +
        +
      • com.chengww.qingstor_sdk_android.task.UploadTask<String> (implements java.lang.Comparable<T>, java.lang.Runnable, com.qingstor.sdk.upload.UploadProgressListener)
      • +
      +
    • +
    • com.chengww.qingstor_sdk_android.task.UploadThreadPool
    • +
    +
  • +
+

接口分层结构

+ +
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/utils/IOUtils.html b/docs/com/chengww/qingstor_sdk_android/utils/IOUtils.html new file mode 100644 index 0000000..1a1c2fd --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/utils/IOUtils.html @@ -0,0 +1,445 @@ + + + + + + +IOUtils (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.utils
+

类 IOUtils

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.utils.IOUtils
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class IOUtils
    +extends java.lang.Object
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      IOUtils() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 静态方法 具体方法 
      限定符和类型方法和说明
      static <T> voidcheckNotNull(T object, + java.lang.String message) 
      static voidcloseQuietly(java.io.Closeable closeable) 
      static booleancreateFolder(java.io.File targetFolder) +
      Create a folder, If the folder exists is not created.
      +
      static booleancreateFolder(java.lang.String folderPath) +
      Create a folder, If the folder exists is not created.
      +
      static booleandelFileOrFolder(java.io.File file) +
      Delete file or folder.
      +
      static booleandelFileOrFolder(java.lang.String path) +
      Delete file or folder.
      +
      static BucketgetBucket(MyBucket myBucket) 
      static java.lang.StringgetFileName(java.lang.String objectKey) 
      static MyBucketgetMyBucket(Bucket bucket) 
      static byte[]toByteArray(java.lang.Object input) 
      static java.lang.ObjecttoObject(byte[] input) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        IOUtils

        +
        public IOUtils()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + + + +
        +
      • +

        checkNotNull

        +
        public static <T> void checkNotNull(T object,
        +                                    java.lang.String message)
        +
      • +
      + + + +
        +
      • +

        closeQuietly

        +
        public static void closeQuietly(java.io.Closeable closeable)
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public static byte[] toByteArray(java.lang.Object input)
        +
      • +
      + + + +
        +
      • +

        toObject

        +
        public static java.lang.Object toObject(byte[] input)
        +
      • +
      + + + +
        +
      • +

        createFolder

        +
        public static boolean createFolder(java.lang.String folderPath)
        +
        Create a folder, If the folder exists is not created.
        +
        +
        参数:
        +
        folderPath - folder path.
        +
        返回:
        +
        True: success, or false: failure.
        +
        +
      • +
      + + + +
        +
      • +

        createFolder

        +
        public static boolean createFolder(java.io.File targetFolder)
        +
        Create a folder, If the folder exists is not created.
        +
        +
        参数:
        +
        targetFolder - folder path.
        +
        返回:
        +
        True: success, or false: failure.
        +
        +
      • +
      + + + +
        +
      • +

        delFileOrFolder

        +
        public static boolean delFileOrFolder(java.lang.String path)
        +
        Delete file or folder.
        +
        +
        参数:
        +
        path - path.
        +
        返回:
        +
        is succeed.
        +
        另请参阅:
        +
        delFileOrFolder(File)
        +
        +
      • +
      + + + +
        +
      • +

        delFileOrFolder

        +
        public static boolean delFileOrFolder(java.io.File file)
        +
        Delete file or folder.
        +
        +
        参数:
        +
        file - file.
        +
        返回:
        +
        is succeed.
        +
        另请参阅:
        +
        delFileOrFolder(String)
        +
        +
      • +
      + + + +
        +
      • +

        getFileName

        +
        public static java.lang.String getFileName(java.lang.String objectKey)
        +
      • +
      + + + +
        +
      • +

        getMyBucket

        +
        public static MyBucket getMyBucket(Bucket bucket)
        +
      • +
      + + + +
        +
      • +

        getBucket

        +
        public static Bucket getBucket(MyBucket myBucket)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/utils/ResUtils.html b/docs/com/chengww/qingstor_sdk_android/utils/ResUtils.html new file mode 100644 index 0000000..de075a0 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/utils/ResUtils.html @@ -0,0 +1,299 @@ + + + + + + +ResUtils (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.chengww.qingstor_sdk_android.utils
+

类 ResUtils

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.chengww.qingstor_sdk_android.utils.ResUtils
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class ResUtils
    +extends java.lang.Object
    +
    Created by chengww on 2018/12/28.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      ResUtils() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 静态方法 具体方法 
      限定符和类型方法和说明
      static java.lang.Stringstring(android.content.Context context, + java.lang.String key) 
      static java.lang.Stringstring(int id) 
      static java.lang.Stringstring(java.lang.String key) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ResUtils

        +
        public ResUtils()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        string

        +
        public static java.lang.String string(android.content.Context context,
        +                                      java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        string

        +
        public static java.lang.String string(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        string

        +
        public static java.lang.String string(int id)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/utils/package-frame.html b/docs/com/chengww/qingstor_sdk_android/utils/package-frame.html new file mode 100644 index 0000000..b2cd717 --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/utils/package-frame.html @@ -0,0 +1,22 @@ + + + + + + +com.chengww.qingstor_sdk_android.utils (qingstor-sdk-android docs) + + + + + +

com.chengww.qingstor_sdk_android.utils

+
+

+ +
+ + diff --git a/docs/com/chengww/qingstor_sdk_android/utils/package-summary.html b/docs/com/chengww/qingstor_sdk_android/utils/package-summary.html new file mode 100644 index 0000000..a06e59a --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/utils/package-summary.html @@ -0,0 +1,149 @@ + + + + + + +com.chengww.qingstor_sdk_android.utils (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.chengww.qingstor_sdk_android.utils

+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    类概要 
    说明
    IOUtils +
    Created by chengww on 2018/12/28.
    +
    ResUtils +
    Created by chengww on 2018/12/28.
    +
    +
  • +
+
+ + + + + + diff --git a/docs/com/chengww/qingstor_sdk_android/utils/package-tree.html b/docs/com/chengww/qingstor_sdk_android/utils/package-tree.html new file mode 100644 index 0000000..5db41ec --- /dev/null +++ b/docs/com/chengww/qingstor_sdk_android/utils/package-tree.html @@ -0,0 +1,137 @@ + + + + + + +com.chengww.qingstor_sdk_android.utils 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.chengww.qingstor_sdk_android.utils的分层结构

+程序包分层结构: + +
+
+

类分层结构

+
    +
  • java.lang.Object +
      +
    • com.chengww.qingstor_sdk_android.utils.IOUtils
    • +
    • com.chengww.qingstor_sdk_android.utils.ResUtils
    • +
    +
  • +
+
+ + + + + + diff --git a/docs/com/qingstor/sdk/annotation/ParamAnnotation.html b/docs/com/qingstor/sdk/annotation/ParamAnnotation.html new file mode 100644 index 0000000..c961c98 --- /dev/null +++ b/docs/com/qingstor/sdk/annotation/ParamAnnotation.html @@ -0,0 +1,235 @@ + + + + + + +ParamAnnotation (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.annotation
+

注释类型 ParamAnnotation

+
+
+
+
    +
  • +
    +
    +
    @Retention(value=RUNTIME)
    +public @interface ParamAnnotation
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      可选元素概要

      + + + + + + + + + + + + + + +
      可选元素 
      限定符和类型可选元素和说明
      java.lang.StringparamName 
      java.lang.StringparamType 
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      元素详细资料

      + + + +
        +
      • +

        paramType

        +
        public abstract java.lang.String paramType
        +
        +
        默认值:
        +
        "body"
        +
        +
      • +
      +
    • +
    +
      +
    • + + +
        +
      • +

        paramName

        +
        public abstract java.lang.String paramName
        +
        +
        默认值:
        +
        ""
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/annotation/package-frame.html b/docs/com/qingstor/sdk/annotation/package-frame.html new file mode 100644 index 0000000..4fbd3cb --- /dev/null +++ b/docs/com/qingstor/sdk/annotation/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.qingstor.sdk.annotation (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.annotation

+
+

注释类型

+ +
+ + diff --git a/docs/com/qingstor/sdk/annotation/package-summary.html b/docs/com/qingstor/sdk/annotation/package-summary.html new file mode 100644 index 0000000..b2ebe2c --- /dev/null +++ b/docs/com/qingstor/sdk/annotation/package-summary.html @@ -0,0 +1,141 @@ + + + + + + +com.qingstor.sdk.annotation (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.annotation

+
+
+
    +
  • + + + + + + + + + + + + +
    注释类型概要 
    注释类型说明
    ParamAnnotation 
    +
  • +
+
+ + + + + + diff --git a/docs/com/qingstor/sdk/annotation/package-tree.html b/docs/com/qingstor/sdk/annotation/package-tree.html new file mode 100644 index 0000000..562fe02 --- /dev/null +++ b/docs/com/qingstor/sdk/annotation/package-tree.html @@ -0,0 +1,132 @@ + + + + + + +com.qingstor.sdk.annotation 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.annotation的分层结构

+程序包分层结构: + +
+
+

注释类型分层结构

+
    +
  • com.qingstor.sdk.annotation.ParamAnnotation (implements java.lang.annotation.Annotation)
  • +
+
+ + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.CropParam.Builder.html b/docs/com/qingstor/sdk/client/ImageProcessClient.CropParam.Builder.html new file mode 100644 index 0000000..099abc6 --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.CropParam.Builder.html @@ -0,0 +1,313 @@ + + + + + + +ImageProcessClient.CropParam.Builder (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.CropParam.Builder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.CropParam.Builder
    • +
    +
  • +
+
+
    +
  • +
    +
    封闭类:
    +
    ImageProcessClient.CropParam
    +
    +
    +
    +
    public static class ImageProcessClient.CropParam.Builder
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.CropParam.html b/docs/com/qingstor/sdk/client/ImageProcessClient.CropParam.html new file mode 100644 index 0000000..6da0dcc --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.CropParam.html @@ -0,0 +1,268 @@ + + + + + + +ImageProcessClient.CropParam (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.CropParam

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.CropParam
    • +
    +
  • +
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringbuildOptParamStr() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.FormatParam.html b/docs/com/qingstor/sdk/client/ImageProcessClient.FormatParam.html new file mode 100644 index 0000000..28442b2 --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.FormatParam.html @@ -0,0 +1,319 @@ + + + + + + +ImageProcessClient.FormatParam (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.FormatParam

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.FormatParam
    • +
    +
  • +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段概要

      + + + + + + + + + + +
      字段 
      限定符和类型字段和说明
      java.lang.Stringtype 
      +
    • +
    + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      FormatParam(java.lang.String type) 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringbuildOptParamStr() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        type

        +
        public java.lang.String type
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        FormatParam

        +
        public FormatParam(java.lang.String type)
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.ImageParam.html b/docs/com/qingstor/sdk/client/ImageProcessClient.ImageParam.html new file mode 100644 index 0000000..5e43656 --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.ImageParam.html @@ -0,0 +1,228 @@ + + + + + + +ImageProcessClient.ImageParam (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

接口 ImageProcessClient.ImageParam

+
+
+ +
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        buildOptParamStr

        +
        java.lang.String buildOptParamStr()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.InfoParam.html b/docs/com/qingstor/sdk/client/ImageProcessClient.InfoParam.html new file mode 100644 index 0000000..5243643 --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.InfoParam.html @@ -0,0 +1,283 @@ + + + + + + +ImageProcessClient.InfoParam (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.InfoParam

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.InfoParam
    • +
    +
  • +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      InfoParam() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringbuildOptParamStr() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.ResizeParam.Builder.html b/docs/com/qingstor/sdk/client/ImageProcessClient.ResizeParam.Builder.html new file mode 100644 index 0000000..2fabf05 --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.ResizeParam.Builder.html @@ -0,0 +1,313 @@ + + + + + + +ImageProcessClient.ResizeParam.Builder (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.ResizeParam.Builder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.ResizeParam.Builder
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.ResizeParam.html b/docs/com/qingstor/sdk/client/ImageProcessClient.ResizeParam.html new file mode 100644 index 0000000..f7c664c --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.ResizeParam.html @@ -0,0 +1,268 @@ + + + + + + +ImageProcessClient.ResizeParam (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.ResizeParam

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.ResizeParam
    • +
    +
  • +
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringbuildOptParamStr() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.RotateParam.html b/docs/com/qingstor/sdk/client/ImageProcessClient.RotateParam.html new file mode 100644 index 0000000..e99264f --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.RotateParam.html @@ -0,0 +1,283 @@ + + + + + + +ImageProcessClient.RotateParam (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.RotateParam

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.RotateParam
    • +
    +
  • +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      RotateParam(int angle) 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringbuildOptParamStr() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkImageParam.Builder.html b/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkImageParam.Builder.html new file mode 100644 index 0000000..b8afb3b --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkImageParam.Builder.html @@ -0,0 +1,313 @@ + + + + + + +ImageProcessClient.WaterMarkImageParam.Builder (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.WaterMarkImageParam.Builder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.WaterMarkImageParam.Builder
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkImageParam.html b/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkImageParam.html new file mode 100644 index 0000000..18a1779 --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkImageParam.html @@ -0,0 +1,268 @@ + + + + + + +ImageProcessClient.WaterMarkImageParam (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.WaterMarkImageParam

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.WaterMarkImageParam
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkParam.Builder.html b/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkParam.Builder.html new file mode 100644 index 0000000..7c975ad --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkParam.Builder.html @@ -0,0 +1,313 @@ + + + + + + +ImageProcessClient.WaterMarkParam.Builder (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.WaterMarkParam.Builder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.WaterMarkParam.Builder
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkParam.html b/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkParam.html new file mode 100644 index 0000000..1f637ce --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.WaterMarkParam.html @@ -0,0 +1,268 @@ + + + + + + +ImageProcessClient.WaterMarkParam (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient.WaterMarkParam

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient.WaterMarkParam
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/ImageProcessClient.html b/docs/com/qingstor/sdk/client/ImageProcessClient.html new file mode 100644 index 0000000..c26c5e1 --- /dev/null +++ b/docs/com/qingstor/sdk/client/ImageProcessClient.html @@ -0,0 +1,565 @@ + + + + + + +ImageProcessClient (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.client
+

类 ImageProcessClient

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.client.ImageProcessClient
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class ImageProcessClient
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/package-frame.html b/docs/com/qingstor/sdk/client/package-frame.html new file mode 100644 index 0000000..8be62a9 --- /dev/null +++ b/docs/com/qingstor/sdk/client/package-frame.html @@ -0,0 +1,36 @@ + + + + + + +com.qingstor.sdk.client (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.client

+ + + diff --git a/docs/com/qingstor/sdk/client/package-summary.html b/docs/com/qingstor/sdk/client/package-summary.html new file mode 100644 index 0000000..81a1708 --- /dev/null +++ b/docs/com/qingstor/sdk/client/package-summary.html @@ -0,0 +1,200 @@ + + + + + + +com.qingstor.sdk.client (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.client

+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/client/package-tree.html b/docs/com/qingstor/sdk/client/package-tree.html new file mode 100644 index 0000000..ca77c15 --- /dev/null +++ b/docs/com/qingstor/sdk/client/package-tree.html @@ -0,0 +1,151 @@ + + + + + + +com.qingstor.sdk.client 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.client的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +

接口分层结构

+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/config/EnvContext.html b/docs/com/qingstor/sdk/config/EnvContext.html new file mode 100644 index 0000000..73452ea --- /dev/null +++ b/docs/com/qingstor/sdk/config/EnvContext.html @@ -0,0 +1,670 @@ + + + + + + +EnvContext (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.config
+

类 EnvContext

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.config.EnvContext
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        qingcloudStorHost

        +
        public static java.lang.String qingcloudStorHost
        +
      • +
      + + + +
        +
      • +

        default_protocal

        +
        public static java.lang.String default_protocal
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        EnvContext

        +
        public EnvContext(java.lang.String accessKey,
        +                  java.lang.String accessSecret)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getRequestUrlStyle

        +
        public java.lang.String getRequestUrlStyle()
        +
        QSConstant.VIRTUAL_HOST_STYLE:
        + https://bucket-name.zone-id.qingstor.com/object-name
        + QSConstant.PATH_STYLE:
        + https://zone-id.qingstor.com/bucket-name/object-name
        +
        +
        返回:
        +
        request url style
        +
        +
      • +
      + + + +
        +
      • +

        setRequestUrlStyle

        +
        public void setRequestUrlStyle(java.lang.String requestUrlStyle)
        +
        You can use this method to change the url style.
        + Now available style:
        + One is the default, when requestUrlStyle != QSConstant.PATH_STYLE
        + You may see the url like this(QSConstant.VIRTUAL_HOST_STYLE):
        + https://bucket-name.zone-id.qingstor.com/object-name
        + Otherwise you may see the url like this(QSConstant.PATH_STYLE):
        + https://zone-id.qingstor.com/bucket-name/object-name
        +
        +
        参数:
        +
        requestUrlStyle - set QSConstant.PATH_STYLE or QSConstant.VIRTUAL_HOST_STYLE
        +
        +
      • +
      + + + +
        +
      • +

        isSafeOkHttp

        +
        public boolean isSafeOkHttp()
        +
      • +
      + + + +
        +
      • +

        setSafeOkHttp

        +
        @Deprecated
        +public void setSafeOkHttp(boolean safeOkHttp)
        +
        已过时。 
        +
        This method will be deleted in subsequent releases
        +
        +
        参数:
        +
        safeOkHttp - is safe okHttp or not
        +
        +
      • +
      + + + +
        +
      • +

        getAccessKey

        +
        public java.lang.String getAccessKey()
        +
      • +
      + + + +
        +
      • +

        setAccessKey

        +
        public void setAccessKey(java.lang.String accessKey)
        +
      • +
      + + + +
        +
      • +

        getAccessSecret

        +
        public java.lang.String getAccessSecret()
        +
      • +
      + + + +
        +
      • +

        setAccessSecret

        +
        public void setAccessSecret(java.lang.String accessSecret)
        +
      • +
      + + + +
        +
      • +

        getHost

        +
        public java.lang.String getHost()
        +
      • +
      + + + +
        +
      • +

        setHost

        +
        public void setHost(java.lang.String host)
        +
        +
        参数:
        +
        host - example: qingstor.com
        +
        +
      • +
      + + + +
        +
      • +

        getPort

        +
        public java.lang.String getPort()
        +
      • +
      + + + +
        +
      • +

        setPort

        +
        public void setPort(java.lang.String port)
        +
        +
        参数:
        +
        port - example: 8080
        +
        +
      • +
      + + + +
        +
      • +

        getProtocol

        +
        public java.lang.String getProtocol()
        +
      • +
      + + + +
        +
      • +

        setProtocol

        +
        public void setProtocol(java.lang.String protocol)
        +
        +
        参数:
        +
        protocol - example: https or http
        +
        +
      • +
      + + + +
        +
      • +

        getUri

        +
        public java.lang.String getUri()
        +
      • +
      + + + +
        +
      • +

        getRequestUrl

        +
        public java.lang.String getRequestUrl()
        +
      • +
      + + + +
        +
      • +

        setUri

        +
        public void setUri(java.lang.String uri)
        +
        +
        参数:
        +
        uri - example: /iaas
        +
        +
      • +
      + + + +
        +
      • +

        getLog_level

        +
        public java.lang.String getLog_level()
        +
      • +
      + + + +
        +
      • +

        setLog_level

        +
        public void setLog_level(java.lang.String log_level)
        +
      • +
      + + + +
        +
      • +

        getAdditionalUserAgent

        +
        public java.lang.String getAdditionalUserAgent()
        +
        +
        返回:
        +
        the additionalUserAgent
        +
        +
      • +
      + + + +
        +
      • +

        setAdditionalUserAgent

        +
        public void setAdditionalUserAgent(java.lang.String additionalUserAgent)
        +
        +
        参数:
        +
        additionalUserAgent - the additionalUserAgent to set
        +
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/config/EvnContext.html b/docs/com/qingstor/sdk/config/EvnContext.html new file mode 100644 index 0000000..c70cb4b --- /dev/null +++ b/docs/com/qingstor/sdk/config/EvnContext.html @@ -0,0 +1,281 @@ + + + + + + +EvnContext (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.config
+

类 EvnContext

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate, java.io.Serializable
    +
    +
    +
    已过时。
    +
    +
    @Deprecated
    +public class EvnContext
    +extends EnvContext
    +implements java.io.Serializable
    +
    Deprecated, use EnvContext instead.
    + 已过时,请使用 EnvContext
    +
    +
    另请参阅:
    +
    序列化表格
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        EvnContext

        +
        public EvnContext(java.lang.String accessKey,
        +                  java.lang.String accessSecret)
        +
        已过时。 
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/config/package-frame.html b/docs/com/qingstor/sdk/config/package-frame.html new file mode 100644 index 0000000..6dc4497 --- /dev/null +++ b/docs/com/qingstor/sdk/config/package-frame.html @@ -0,0 +1,22 @@ + + + + + + +com.qingstor.sdk.config (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.config

+
+

+ +
+ + diff --git a/docs/com/qingstor/sdk/config/package-summary.html b/docs/com/qingstor/sdk/config/package-summary.html new file mode 100644 index 0000000..e9561c6 --- /dev/null +++ b/docs/com/qingstor/sdk/config/package-summary.html @@ -0,0 +1,145 @@ + + + + + + +com.qingstor.sdk.config (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.config

+
+
+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/config/package-tree.html b/docs/com/qingstor/sdk/config/package-tree.html new file mode 100644 index 0000000..e801d1b --- /dev/null +++ b/docs/com/qingstor/sdk/config/package-tree.html @@ -0,0 +1,140 @@ + + + + + + +com.qingstor.sdk.config 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.config的分层结构

+程序包分层结构: + +
+
+

类分层结构

+
    +
  • java.lang.Object +
      +
    • com.qingstor.sdk.config.EnvContext (implements com.qingstor.sdk.request.ParamValidate, java.io.Serializable) +
        +
      • com.qingstor.sdk.config.EvnContext (implements java.io.Serializable)
      • +
      +
    • +
    +
  • +
+
+ + + + + + diff --git a/docs/com/qingstor/sdk/constants/QSConstant.html b/docs/com/qingstor/sdk/constants/QSConstant.html new file mode 100644 index 0000000..e6d7421 --- /dev/null +++ b/docs/com/qingstor/sdk/constants/QSConstant.html @@ -0,0 +1,1057 @@ + + + + + + +QSConstant (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.constants
+

类 QSConstant

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.constants.QSConstant
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QSConstant
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        SDK_VERSION

        +
        public static java.lang.String SDK_VERSION
        +
      • +
      + + + +
        +
      • +

        SDK_NAME

        +
        public static java.lang.String SDK_NAME
        +
      • +
      + + + +
        +
      • +

        QC_CODE_FIELD_NAME

        +
        public static java.lang.String QC_CODE_FIELD_NAME
        +
      • +
      + + + +
        +
      • +

        QC_MESSAGE_FIELD_NAME

        +
        public static java.lang.String QC_MESSAGE_FIELD_NAME
        +
      • +
      + + + +
        +
      • +

        PARAM_TYPE_QUERY

        +
        public static final java.lang.String PARAM_TYPE_QUERY
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_TYPE_BODY

        +
        public static final java.lang.String PARAM_TYPE_BODY
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_TYPE_HEADER

        +
        public static final java.lang.String PARAM_TYPE_HEADER
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_TYPE_FORM_DATA

        +
        public static final java.lang.String PARAM_TYPE_FORM_DATA
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_TYPE_BODYINPUTSTREAM

        +
        public static final java.lang.String PARAM_TYPE_BODYINPUTSTREAM
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_TYPE_BODYINPUTSTRING

        +
        public static final java.lang.String PARAM_TYPE_BODYINPUTSTRING
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_TYPE_BODYINPUTFILE

        +
        public static final java.lang.String PARAM_TYPE_BODYINPUTFILE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_BUCKET_NAME

        +
        public static final java.lang.String PARAM_KEY_BUCKET_NAME
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_OBJECT_NAME

        +
        public static final java.lang.String PARAM_KEY_OBJECT_NAME
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_REQUEST_PATH

        +
        public static final java.lang.String PARAM_KEY_REQUEST_PATH
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_REQUEST_METHOD

        +
        public static final java.lang.String PARAM_KEY_REQUEST_METHOD
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_REQUEST_ZONE

        +
        public static final java.lang.String PARAM_KEY_REQUEST_ZONE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_REQUEST_API_MULTIPART

        +
        public static final java.lang.String PARAM_KEY_REQUEST_API_MULTIPART
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_REQUEST_API_DELETE_MULTIPART

        +
        public static final java.lang.String PARAM_KEY_REQUEST_API_DELETE_MULTIPART
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_REQUEST_APINAME

        +
        public static final java.lang.String PARAM_KEY_REQUEST_APINAME
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_CONTENT_LENGTH

        +
        public static final java.lang.String PARAM_KEY_CONTENT_LENGTH
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_CONTENT_MD5

        +
        public static final java.lang.String PARAM_KEY_CONTENT_MD5
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_USER_AGENT

        +
        public static final java.lang.String PARAM_KEY_USER_AGENT
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_EXPIRES

        +
        public static final java.lang.String PARAM_KEY_EXPIRES
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_PART_NUMBER

        +
        public static final java.lang.String PARAM_KEY_PART_NUMBER
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PARAM_KEY_FILE_OFFSET

        +
        public static final java.lang.String PARAM_KEY_FILE_OFFSET
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        BUCKET_NAME_REPLACE

        +
        public static final java.lang.String BUCKET_NAME_REPLACE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        OBJECT_NAME_REPLACE

        +
        public static final java.lang.String OBJECT_NAME_REPLACE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        CONTENT_TYPE_TEXT

        +
        public static final java.lang.String CONTENT_TYPE_TEXT
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        ENCODING_UTF8

        +
        public static final java.lang.String ENCODING_UTF8
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        EVN_CONTEXT_KEY

        +
        public static final java.lang.String EVN_CONTEXT_KEY
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        SDK_TYPE_IAAS

        +
        public static final java.lang.String SDK_TYPE_IAAS
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        SDK_TYPE_STOR

        +
        public static final java.lang.String SDK_TYPE_STOR
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        HEADER_PARAM_KEY_DATE

        +
        public static final java.lang.String HEADER_PARAM_KEY_DATE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        HEADER_PARAM_KEY_EXPIRES

        +
        public static final java.lang.String HEADER_PARAM_KEY_EXPIRES
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        HEADER_PARAM_KEY_CONTENTTYPE

        +
        public static final java.lang.String HEADER_PARAM_KEY_CONTENTTYPE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        HEADER_PARAM_KEY_AUTHORIZATION

        +
        public static final java.lang.String HEADER_PARAM_KEY_AUTHORIZATION
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        HEADER_PARAM_KEY_SIGNATURE

        +
        public static final java.lang.String HEADER_PARAM_KEY_SIGNATURE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        REQUEST_ERROR_CODE

        +
        public static final int REQUEST_ERROR_CODE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        REQUEST_ERROR_CANCELLED

        +
        public static final int REQUEST_ERROR_CANCELLED
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        LOGGER_LEVEL

        +
        public static java.lang.String LOGGER_LEVEL
        +
      • +
      + + + +
        +
      • +

        LOGGER_ERROR

        +
        public static java.lang.String LOGGER_ERROR
        +
      • +
      + + + +
        +
      • +

        LOGGER_WARNNING

        +
        public static java.lang.String LOGGER_WARNNING
        +
      • +
      + + + +
        +
      • +

        LOGGER_INFO

        +
        public static java.lang.String LOGGER_INFO
        +
      • +
      + + + +
        +
      • +

        LOGGER_DEBUG

        +
        public static java.lang.String LOGGER_DEBUG
        +
      • +
      + + + +
        +
      • +

        LOGGER_FATAL

        +
        public static java.lang.String LOGGER_FATAL
        +
      • +
      + + + +
        +
      • +

        HTTPCLIENT_CONNECTION_TIME_OUT

        +
        public static int HTTPCLIENT_CONNECTION_TIME_OUT
        +
      • +
      + + + +
        +
      • +

        HTTPCLIENT_READ_TIME_OUT

        +
        public static int HTTPCLIENT_READ_TIME_OUT
        +
      • +
      + + + +
        +
      • +

        HTTPCLIENT_WRITE_TIME_OUT

        +
        public static int HTTPCLIENT_WRITE_TIME_OUT
        +
      • +
      + + + +
        +
      • +

        VIRTUAL_HOST_STYLE

        +
        public static final java.lang.String VIRTUAL_HOST_STYLE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        PATH_STYLE

        +
        public static final java.lang.String PATH_STYLE
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSConstant

        +
        public QSConstant()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/constants/package-frame.html b/docs/com/qingstor/sdk/constants/package-frame.html new file mode 100644 index 0000000..fdf0a94 --- /dev/null +++ b/docs/com/qingstor/sdk/constants/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.qingstor.sdk.constants (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.constants

+
+

+ +
+ + diff --git a/docs/com/qingstor/sdk/constants/package-summary.html b/docs/com/qingstor/sdk/constants/package-summary.html new file mode 100644 index 0000000..980380c --- /dev/null +++ b/docs/com/qingstor/sdk/constants/package-summary.html @@ -0,0 +1,141 @@ + + + + + + +com.qingstor.sdk.constants (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.constants

+
+
+
    +
  • + + + + + + + + + + + + +
    类概要 
    说明
    QSConstant 
    +
  • +
+
+ + + + + + diff --git a/docs/com/qingstor/sdk/constants/package-tree.html b/docs/com/qingstor/sdk/constants/package-tree.html new file mode 100644 index 0000000..fc576b4 --- /dev/null +++ b/docs/com/qingstor/sdk/constants/package-tree.html @@ -0,0 +1,136 @@ + + + + + + +com.qingstor.sdk.constants 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.constants的分层结构

+程序包分层结构: + +
+
+

类分层结构

+
    +
  • java.lang.Object + +
  • +
+
+ + + + + + diff --git a/docs/com/qingstor/sdk/exception/QSException.html b/docs/com/qingstor/sdk/exception/QSException.html new file mode 100644 index 0000000..0e8a6af --- /dev/null +++ b/docs/com/qingstor/sdk/exception/QSException.html @@ -0,0 +1,396 @@ + + + + + + +QSException (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.exception
+

类 QSException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • java.lang.RuntimeException
        • +
        • +
            +
          • com.qingstor.sdk.exception.QSException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class QSException
    +extends java.lang.RuntimeException
    +
    +
    另请参阅:
    +
    序列化表格
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + + + + +
      构造器 
      构造器和说明
      QSException(java.lang.String message) 
      QSException(java.lang.String message, + java.lang.Throwable t) 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      intgetErrorCode() 
      java.lang.StringgetErrorMessage() 
      java.lang.StringgetMessage() 
      java.lang.StringgetServiceName() 
      voidsetErrorCode(int errorCode) 
      voidsetErrorMessage(java.lang.String errorMessage) 
      voidsetServiceName(java.lang.String serviceName) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSException

        +
        public QSException(java.lang.String message,
        +                   java.lang.Throwable t)
        +
      • +
      + + + +
        +
      • +

        QSException

        +
        public QSException(java.lang.String message)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getServiceName

        +
        public java.lang.String getServiceName()
        +
      • +
      + + + +
        +
      • +

        setServiceName

        +
        public void setServiceName(java.lang.String serviceName)
        +
      • +
      + + + +
        +
      • +

        getErrorCode

        +
        public int getErrorCode()
        +
      • +
      + + + +
        +
      • +

        setErrorCode

        +
        public void setErrorCode(int errorCode)
        +
      • +
      + + + +
        +
      • +

        getErrorMessage

        +
        public java.lang.String getErrorMessage()
        +
      • +
      + + + +
        +
      • +

        setErrorMessage

        +
        public void setErrorMessage(java.lang.String errorMessage)
        +
      • +
      + + + +
        +
      • +

        getMessage

        +
        public java.lang.String getMessage()
        +
        +
        覆盖:
        +
        getMessage 在类中 java.lang.Throwable
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/exception/package-frame.html b/docs/com/qingstor/sdk/exception/package-frame.html new file mode 100644 index 0000000..6fe2aee --- /dev/null +++ b/docs/com/qingstor/sdk/exception/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.qingstor.sdk.exception (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.exception

+
+

异常错误

+ +
+ + diff --git a/docs/com/qingstor/sdk/exception/package-summary.html b/docs/com/qingstor/sdk/exception/package-summary.html new file mode 100644 index 0000000..7cfb4f0 --- /dev/null +++ b/docs/com/qingstor/sdk/exception/package-summary.html @@ -0,0 +1,141 @@ + + + + + + +com.qingstor.sdk.exception (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.exception

+
+
+
    +
  • + + + + + + + + + + + + +
    异常错误概要 
    异常错误说明
    QSException 
    +
  • +
+
+ + + + + + diff --git a/docs/com/qingstor/sdk/exception/package-tree.html b/docs/com/qingstor/sdk/exception/package-tree.html new file mode 100644 index 0000000..14d50f3 --- /dev/null +++ b/docs/com/qingstor/sdk/exception/package-tree.html @@ -0,0 +1,148 @@ + + + + + + +com.qingstor.sdk.exception 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.exception的分层结构

+程序包分层结构: + +
+
+

类分层结构

+
    +
  • java.lang.Object +
      +
    • java.lang.Throwable (implements java.io.Serializable) +
        +
      • java.lang.Exception +
          +
        • java.lang.RuntimeException + +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+ + + + + + diff --git a/docs/com/qingstor/sdk/model/OutputModel.html b/docs/com/qingstor/sdk/model/OutputModel.html new file mode 100644 index 0000000..ad5a984 --- /dev/null +++ b/docs/com/qingstor/sdk/model/OutputModel.html @@ -0,0 +1,403 @@ + + + + + + +OutputModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.model
+

类 OutputModel

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.model.OutputModel
    • +
    +
  • +
+ +
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      OutputModel() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetCode() 
      java.lang.StringgetMessage() 
      java.lang.StringgetRequestId() 
      java.lang.IntegergetStatueCode() 
      java.lang.StringgetUrl() 
      voidsetCode(java.lang.String code) 
      voidsetMessage(java.lang.String message) 
      voidsetRequestId(java.lang.String requestId) 
      voidsetStatueCode(java.lang.Integer statueCode) 
      voidsetUrl(java.lang.String url) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        OutputModel

        +
        public OutputModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getStatueCode

        +
        public java.lang.Integer getStatueCode()
        +
      • +
      + + + +
        +
      • +

        setStatueCode

        +
        public void setStatueCode(java.lang.Integer statueCode)
        +
      • +
      + + + +
        +
      • +

        getCode

        +
        public java.lang.String getCode()
        +
        +
        返回:
        +
        the error code
        +
        +
      • +
      + + + +
        +
      • +

        setCode

        +
        public void setCode(java.lang.String code)
        +
      • +
      + + + +
        +
      • +

        getRequestId

        +
        public java.lang.String getRequestId()
        +
        +
        返回:
        +
        the requestId
        +
        +
      • +
      + + + +
        +
      • +

        setRequestId

        +
        public void setRequestId(java.lang.String requestId)
        +
      • +
      + + + +
        +
      • +

        getUrl

        +
        public java.lang.String getUrl()
        +
        +
        返回:
        +
        the help url
        +
        +
      • +
      + + + +
        +
      • +

        setUrl

        +
        public void setUrl(java.lang.String url)
        +
      • +
      + + + +
        +
      • +

        getMessage

        +
        public java.lang.String getMessage()
        +
      • +
      + + + +
        +
      • +

        setMessage

        +
        public void setMessage(java.lang.String message)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/model/RequestInputModel.html b/docs/com/qingstor/sdk/model/RequestInputModel.html new file mode 100644 index 0000000..d2c8b71 --- /dev/null +++ b/docs/com/qingstor/sdk/model/RequestInputModel.html @@ -0,0 +1,283 @@ + + + + + + +RequestInputModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.model
+

类 RequestInputModel

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.model.RequestInputModel
    • +
    +
  • +
+ +
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        RequestInputModel

        +
        public RequestInputModel()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/model/ResponseCallbackModel.html b/docs/com/qingstor/sdk/model/ResponseCallbackModel.html new file mode 100644 index 0000000..02eb01f --- /dev/null +++ b/docs/com/qingstor/sdk/model/ResponseCallbackModel.html @@ -0,0 +1,309 @@ + + + + + + +ResponseCallbackModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.model
+

类 ResponseCallbackModel

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.model.ResponseCallbackModel
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class ResponseCallbackModel
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ResponseCallbackModel

        +
        public ResponseCallbackModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getCallbackCode

        +
        public int getCallbackCode()
        +
      • +
      + + + +
        +
      • +

        setCallbackCode

        +
        public void setCallbackCode(int callbackCode)
        +
      • +
      + + + +
        +
      • +

        getCallbackModel

        +
        public OutputModel getCallbackModel()
        +
      • +
      + + + +
        +
      • +

        setCallbackModel

        +
        public void setCallbackModel(OutputModel callbackModel)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/model/UploadModel.html b/docs/com/qingstor/sdk/model/UploadModel.html new file mode 100644 index 0000000..065f75c --- /dev/null +++ b/docs/com/qingstor/sdk/model/UploadModel.html @@ -0,0 +1,449 @@ + + + + + + +UploadModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.model
+

类 UploadModel

+
+
+ +
+
    +
  • +
    +
    +
    public class UploadModel
    +extends OutputModel
    +
    A model kept in the upload of FileRecorder
    + Created by chengww on 2018/1/23.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        UploadModel

        +
        public UploadModel()
        +
      • +
      + + + +
        +
      • +

        UploadModel

        +
        public UploadModel(int currentPart,
        +                   java.lang.String uploadID,
        +                   boolean isFileComplete,
        +                   long bytesWritten,
        +                   long totalSize,
        +                   boolean isUploadComplete)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getCurrentPart

        +
        public int getCurrentPart()
        +
      • +
      + + + +
        +
      • +

        setCurrentPart

        +
        public void setCurrentPart(int currentPart)
        +
      • +
      + + + +
        +
      • +

        getUploadID

        +
        public java.lang.String getUploadID()
        +
      • +
      + + + +
        +
      • +

        setUploadID

        +
        public void setUploadID(java.lang.String uploadID)
        +
      • +
      + + + +
        +
      • +

        isFileComplete

        +
        public boolean isFileComplete()
        +
      • +
      + + + +
        +
      • +

        setFileComplete

        +
        public void setFileComplete(boolean fileComplete)
        +
      • +
      + + + +
        +
      • +

        getBytesWritten

        +
        public long getBytesWritten()
        +
      • +
      + + + +
        +
      • +

        setBytesWritten

        +
        public void setBytesWritten(long bytesWritten)
        +
      • +
      + + + +
        +
      • +

        getTotalSize

        +
        public long getTotalSize()
        +
      • +
      + + + +
        +
      • +

        setTotalSize

        +
        public void setTotalSize(long totalSize)
        +
      • +
      + + + +
        +
      • +

        isUploadComplete

        +
        public boolean isUploadComplete()
        +
      • +
      + + + +
        +
      • +

        setUploadComplete

        +
        public void setUploadComplete(boolean uploadComplete)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/model/package-frame.html b/docs/com/qingstor/sdk/model/package-frame.html new file mode 100644 index 0000000..4073bbc --- /dev/null +++ b/docs/com/qingstor/sdk/model/package-frame.html @@ -0,0 +1,24 @@ + + + + + + +com.qingstor.sdk.model (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.model

+ + + diff --git a/docs/com/qingstor/sdk/model/package-summary.html b/docs/com/qingstor/sdk/model/package-summary.html new file mode 100644 index 0000000..1f2c9e9 --- /dev/null +++ b/docs/com/qingstor/sdk/model/package-summary.html @@ -0,0 +1,156 @@ + + + + + + +com.qingstor.sdk.model (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.model

+
+
+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/model/package-tree.html b/docs/com/qingstor/sdk/model/package-tree.html new file mode 100644 index 0000000..95c3663 --- /dev/null +++ b/docs/com/qingstor/sdk/model/package-tree.html @@ -0,0 +1,142 @@ + + + + + + +com.qingstor.sdk.model 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.model的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/request/BodyProgressListener.html b/docs/com/qingstor/sdk/request/BodyProgressListener.html new file mode 100644 index 0000000..b9e5e64 --- /dev/null +++ b/docs/com/qingstor/sdk/request/BodyProgressListener.html @@ -0,0 +1,222 @@ + + + + + + +BodyProgressListener (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

接口 BodyProgressListener

+
+
+
+
    +
  • +
    +
    +
    public interface BodyProgressListener
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        onProgress

        +
        void onProgress(long len,
        +                long size)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/CancellationHandler.CancellationException.html b/docs/com/qingstor/sdk/request/CancellationHandler.CancellationException.html new file mode 100644 index 0000000..0565835 --- /dev/null +++ b/docs/com/qingstor/sdk/request/CancellationHandler.CancellationException.html @@ -0,0 +1,308 @@ + + + + + + +CancellationHandler.CancellationException (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

类 CancellationHandler.CancellationException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • java.io.IOException
        • +
        • +
            +
          • com.qingstor.sdk.request.CancellationHandler.CancellationException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    java.io.Serializable
    +
    +
    +
    封闭接口:
    +
    CancellationHandler
    +
    +
    +
    +
    public static class CancellationHandler.CancellationException
    +extends java.io.IOException
    +
    +
    另请参阅:
    +
    序列化表格
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetMessage() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CancellationException

        +
        public CancellationException()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getMessage

        +
        public java.lang.String getMessage()
        +
        +
        覆盖:
        +
        getMessage 在类中 java.lang.Throwable
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/CancellationHandler.html b/docs/com/qingstor/sdk/request/CancellationHandler.html new file mode 100644 index 0000000..3750524 --- /dev/null +++ b/docs/com/qingstor/sdk/request/CancellationHandler.html @@ -0,0 +1,252 @@ + + + + + + +CancellationHandler (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

接口 CancellationHandler

+
+
+
+
    +
  • +
    +
    所有已知实现类:
    +
    MyCancellationHandler
    +
    +
    +
    +
    public interface CancellationHandler
    +
    Created by chengww on 2018/1/22. + A class defined to cancel data or uploading.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        isCancelled

        +
        boolean isCancelled()
        +
        A sign defined to cancel data or uploading
        +
        +
        返回:
        +
        is cancelled or not
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/ParamValidate.html b/docs/com/qingstor/sdk/request/ParamValidate.html new file mode 100644 index 0000000..50e703c --- /dev/null +++ b/docs/com/qingstor/sdk/request/ParamValidate.html @@ -0,0 +1,224 @@ + + + + + + +ParamValidate (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

接口 ParamValidate

+
+
+ +
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        validateParam

        +
        java.lang.String validateParam()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/QSBuilder.html b/docs/com/qingstor/sdk/request/QSBuilder.html new file mode 100644 index 0000000..49ec456 --- /dev/null +++ b/docs/com/qingstor/sdk/request/QSBuilder.html @@ -0,0 +1,389 @@ + + + + + + +QSBuilder (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

类 QSBuilder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.request.QSBuilder
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QSBuilder
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setHeader

        +
        public void setHeader(java.lang.String key,
        +                      java.lang.String authorization)
        +
      • +
      + + + +
        +
      • +

        setSignature

        +
        public void setSignature(java.lang.String accessKey,
        +                         java.lang.String signature)
        +                  throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        getStringToSignature

        +
        public java.lang.String getStringToSignature()
        +                                      throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        getRequest

        +
        public Request getRequest(RequestBody requestBody)
        +                   throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        getExpiresRequestUrl

        +
        public java.lang.String getExpiresRequestUrl()
        +                                      throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/QSOkHttpRequestClient.html b/docs/com/qingstor/sdk/request/QSOkHttpRequestClient.html new file mode 100644 index 0000000..83dcffd --- /dev/null +++ b/docs/com/qingstor/sdk/request/QSOkHttpRequestClient.html @@ -0,0 +1,388 @@ + + + + + + +QSOkHttpRequestClient (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

类 QSOkHttpRequestClient

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.request.QSOkHttpRequestClient
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QSOkHttpRequestClient
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSOkHttpRequestClient

        +
        protected QSOkHttpRequestClient()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getSafetyClient

        +
        public OkHttpClient getSafetyClient()
        +
      • +
      + + + + + + + +
        +
      • +

        requestAction

        +
        public OutputModel requestAction(Request request,
        +                                 boolean bSafe,
        +                                 java.lang.Class outputClass)
        +                          throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        buildUrlRequest

        +
        public Request buildUrlRequest(java.lang.String singedUrl)
        +
        +
        参数:
        +
        singedUrl - with singed parameter url
        +
        返回:
        +
        a build request
        +
        +
      • +
      + + + + + + + +
        +
      • +

        buildRequest

        +
        public Request buildRequest(java.lang.String method,
        +                            java.lang.String signedUrl,
        +                            RequestBody requestBody,
        +                            java.util.Map headParams)
        +
        +
        参数:
        +
        method - request method name
        +
        signedUrl - with signed param url
        +
        headParams - http head params
        +
        requestBody - request body params
        +
        返回:
        +
        a build request
        +
        +
      • +
      + + + +
        +
      • +

        fillResponseCallbackModel

        +
        public static void fillResponseCallbackModel(int code,
        +                                             java.lang.Object content,
        +                                             OutputModel model)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/QSRequest.html b/docs/com/qingstor/sdk/request/QSRequest.html new file mode 100644 index 0000000..50e71ff --- /dev/null +++ b/docs/com/qingstor/sdk/request/QSRequest.html @@ -0,0 +1,442 @@ + + + + + + +QSRequest (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

类 QSRequest

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.request.QSRequest
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/QSRequestBody.html b/docs/com/qingstor/sdk/request/QSRequestBody.html new file mode 100644 index 0000000..c4a94bd --- /dev/null +++ b/docs/com/qingstor/sdk/request/QSRequestBody.html @@ -0,0 +1,237 @@ + + + + + + +QSRequestBody (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

接口 QSRequestBody

+
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 抽象方法 
      限定符和类型方法和说明
      RequestBodygetRequestBody(java.lang.String contentType, + long contentLength, + java.lang.String method, + java.util.Map<java.lang.String,java.lang.Object> bodyParams, + java.util.Map<java.lang.String,java.lang.Object> queryParams) 
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getRequestBody

        +
        RequestBody getRequestBody(java.lang.String contentType,
        +                           long contentLength,
        +                           java.lang.String method,
        +                           java.util.Map<java.lang.String,java.lang.Object> bodyParams,
        +                           java.util.Map<java.lang.String,java.lang.Object> queryParams)
        +                    throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/RequestHandler.html b/docs/com/qingstor/sdk/request/RequestHandler.html new file mode 100644 index 0000000..c805c01 --- /dev/null +++ b/docs/com/qingstor/sdk/request/RequestHandler.html @@ -0,0 +1,528 @@ + + + + + + +RequestHandler (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

类 RequestHandler

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.request.RequestHandler
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class RequestHandler
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法详细资料

      + + + + + + + + + + + +
        +
      • +

        getStringToSignature

        +
        public java.lang.String getStringToSignature()
        +                                      throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        setSignature

        +
        public void setSignature(java.lang.String accessKey,
        +                         java.lang.String signature)
        +                  throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        setSignature

        +
        public void setSignature(java.lang.String accessKey,
        +                         java.lang.String signature,
        +                         java.lang.String gmtTime)
        +                  throws QSException
        +
        Set signature and server time.
        +
        +
        参数:
        +
        accessKey - accessKey
        +
        signature - signature
        +
        gmtTime - time format with GMT
        +
        抛出:
        +
        QSException - exception
        +
        +
      • +
      + + + +
        +
      • +

        getExpiresRequestUrl

        +
        public java.lang.String getExpiresRequestUrl()
        +                                      throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        check

        +
        public java.lang.String check()
        +
      • +
      + + + +
        +
      • +

        getBuilder

        +
        public QSBuilder getBuilder()
        +
      • +
      + + + +
        +
      • +

        getProgressListener

        +
        public BodyProgressListener getProgressListener()
        +
        +
        返回:
        +
        the progressListener
        +
        +
      • +
      + + + +
        +
      • +

        setProgressListener

        +
        public void setProgressListener(BodyProgressListener progressListener)
        +
        +
        参数:
        +
        progressListener - the progressListener to set
        +
        +
      • +
      + + + +
        +
      • +

        getQsRequestBody

        +
        public QSRequestBody getQsRequestBody()
        +
        +
        返回:
        +
        the qsRequestBody
        +
        +
      • +
      + + + +
        +
      • +

        setQsRequestBody

        +
        public void setQsRequestBody(QSRequestBody qsRequestBody)
        +
        +
        参数:
        +
        qsRequestBody - the qsRequestBody to set
        +
        +
      • +
      + + + + + + + +
        +
      • +

        setCancellationHandler

        +
        public void setCancellationHandler(CancellationHandler cancellationHandler)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/ResourceRequest.html b/docs/com/qingstor/sdk/request/ResourceRequest.html new file mode 100644 index 0000000..fa121b1 --- /dev/null +++ b/docs/com/qingstor/sdk/request/ResourceRequest.html @@ -0,0 +1,375 @@ + + + + + + +ResourceRequest (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

接口 ResourceRequest

+
+
+
+
    +
  • +
    +
    所有已知实现类:
    +
    QSRequest
    +
    +
    +
    +
    public interface ResourceRequest
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + + + + + +
        +
      • +

        sendApiRequest

        +
        OutputModel sendApiRequest(java.util.Map context,
        +                           RequestInputModel paramBean,
        +                           java.lang.Class<? extends OutputModel> outputClass)
        +                    throws QSException
        +
        +
        参数:
        +
        context - EvnContext
        +
        paramBean - param
        +
        outputClass - output class
        +
        返回:
        +
        OutputModel
        +
        抛出:
        +
        QSException - exception
        +
        +
      • +
      + + + +
        +
      • +

        sendApiRequestAsync

        +
        void sendApiRequestAsync(java.lang.String requestUrl,
        +                         java.util.Map context,
        +                         ResponseCallBack callback)
        +                  throws QSException
        +
        +
        参数:
        +
        requestUrl - request url
        +
        context - EvnContext
        +
        callback - callback
        +
        抛出:
        +
        QSException - exception
        +
        +
      • +
      + + + +
        +
      • +

        sendApiRequest

        +
        OutputModel sendApiRequest(java.lang.String requestUrl,
        +                           java.util.Map context,
        +                           java.lang.Class<? extends OutputModel> outputClass)
        +                    throws QSException
        +
        +
        参数:
        +
        requestUrl - request url
        +
        context - context
        +
        outputClass - output class
        +
        返回:
        +
        output model
        +
        抛出:
        +
        QSException - exception
        +
        +
      • +
      + + + + + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/ResourceRequestFactory.html b/docs/com/qingstor/sdk/request/ResourceRequestFactory.html new file mode 100644 index 0000000..8240c45 --- /dev/null +++ b/docs/com/qingstor/sdk/request/ResourceRequestFactory.html @@ -0,0 +1,270 @@ + + + + + + +ResourceRequestFactory (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

类 ResourceRequestFactory

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.request.ResourceRequestFactory
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class ResourceRequestFactory
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ResourceRequestFactory

        +
        public ResourceRequestFactory()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getResourceRequest

        +
        public static ResourceRequest getResourceRequest()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/ResponseCallBack.html b/docs/com/qingstor/sdk/request/ResponseCallBack.html new file mode 100644 index 0000000..78a401b --- /dev/null +++ b/docs/com/qingstor/sdk/request/ResponseCallBack.html @@ -0,0 +1,226 @@ + + + + + + +ResponseCallBack (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request
+

接口 ResponseCallBack<O extends OutputModel>

+
+
+
+
    +
  • +
    +
    +
    public interface ResponseCallBack<O extends OutputModel>
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + + + +
        +
      • +

        onAPIResponse

        +
        void onAPIResponse(O output)
        +
        +
        参数:
        +
        output - output extends OutputModel
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/impl/EmptyRequestBody.html b/docs/com/qingstor/sdk/request/impl/EmptyRequestBody.html new file mode 100644 index 0000000..8238145 --- /dev/null +++ b/docs/com/qingstor/sdk/request/impl/EmptyRequestBody.html @@ -0,0 +1,305 @@ + + + + + + +EmptyRequestBody (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request.impl
+

类 EmptyRequestBody

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • RequestBody
    • +
    • +
        +
      • com.qingstor.sdk.request.impl.EmptyRequestBody
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class EmptyRequestBody
    +extends RequestBody
    +
    +
    作者:
    +
    karooli
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      EmptyRequestBody(java.lang.String contentType) 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      longcontentLength() 
      MediaTypecontentType() 
      voidwriteTo(BufferedSink sink) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        EmptyRequestBody

        +
        public EmptyRequestBody(java.lang.String contentType)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        contentLength

        +
        public long contentLength()
        +
      • +
      + + + +
        +
      • +

        writeTo

        +
        public void writeTo(BufferedSink sink)
        +
      • +
      + + + +
        +
      • +

        contentType

        +
        public MediaType contentType()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/impl/InputStreamUploadBody.html b/docs/com/qingstor/sdk/request/impl/InputStreamUploadBody.html new file mode 100644 index 0000000..68ed234 --- /dev/null +++ b/docs/com/qingstor/sdk/request/impl/InputStreamUploadBody.html @@ -0,0 +1,319 @@ + + + + + + +InputStreamUploadBody (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request.impl
+

类 InputStreamUploadBody

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • RequestBody
    • +
    • +
        +
      • com.qingstor.sdk.request.impl.InputStreamUploadBody
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class InputStreamUploadBody
    +extends RequestBody
    +
    +
    作者:
    +
    karooli
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + + + + +
      构造器 
      构造器和说明
      InputStreamUploadBody(java.lang.String contentType, + java.io.InputStream rFile, + long contentLength) 
      InputStreamUploadBody(java.lang.String contentType, + java.io.InputStream rFile, + long contentLength, + long offset) 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      MediaTypecontentType() 
      voidwriteTo(BufferedSink sink) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        InputStreamUploadBody

        +
        public InputStreamUploadBody(java.lang.String contentType,
        +                             java.io.InputStream rFile,
        +                             long contentLength)
        +
      • +
      + + + +
        +
      • +

        InputStreamUploadBody

        +
        public InputStreamUploadBody(java.lang.String contentType,
        +                             java.io.InputStream rFile,
        +                             long contentLength,
        +                             long offset)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        contentType

        +
        public MediaType contentType()
        +
      • +
      + + + +
        +
      • +

        writeTo

        +
        public void writeTo(BufferedSink sink)
        +             throws java.io.IOException
        +
        +
        抛出:
        +
        java.io.IOException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/impl/MultiFileuploadRequestBody.html b/docs/com/qingstor/sdk/request/impl/MultiFileuploadRequestBody.html new file mode 100644 index 0000000..4ec1df2 --- /dev/null +++ b/docs/com/qingstor/sdk/request/impl/MultiFileuploadRequestBody.html @@ -0,0 +1,314 @@ + + + + + + +MultiFileuploadRequestBody (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request.impl
+

类 MultiFileuploadRequestBody

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • RequestBody
    • +
    • +
        +
      • com.qingstor.sdk.request.impl.MultiFileuploadRequestBody
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class MultiFileuploadRequestBody
    +extends RequestBody
    +
    +
    作者:
    +
    karooli
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      MultiFileuploadRequestBody(java.lang.String contentType, + java.io.RandomAccessFile rFile, + long contentLength) 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      longcontentLength() 
      MediaTypecontentType() 
      voidwriteTo(BufferedSink sink) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        MultiFileuploadRequestBody

        +
        public MultiFileuploadRequestBody(java.lang.String contentType,
        +                                  java.io.RandomAccessFile rFile,
        +                                  long contentLength)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        contentLength

        +
        public long contentLength()
        +
      • +
      + + + +
        +
      • +

        contentType

        +
        public MediaType contentType()
        +
      • +
      + + + +
        +
      • +

        writeTo

        +
        public void writeTo(BufferedSink sink)
        +             throws java.io.IOException
        +
        +
        抛出:
        +
        java.io.IOException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/impl/ProgressRequestBody.html b/docs/com/qingstor/sdk/request/impl/ProgressRequestBody.html new file mode 100644 index 0000000..5bc52f1 --- /dev/null +++ b/docs/com/qingstor/sdk/request/impl/ProgressRequestBody.html @@ -0,0 +1,301 @@ + + + + + + +ProgressRequestBody (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request.impl
+

类 ProgressRequestBody

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • RequestBody
    • +
    • +
        +
      • com.qingstor.sdk.request.impl.ProgressRequestBody
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class ProgressRequestBody
    +extends RequestBody
    +
    +
    作者:
    +
    karooli
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        contentType

        +
        public MediaType contentType()
        +
      • +
      + + + +
        +
      • +

        writeTo

        +
        public void writeTo(BufferedSink bufferedSink)
        +             throws java.io.IOException
        +
        +
        抛出:
        +
        java.io.IOException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/impl/QSFormRequestBody.html b/docs/com/qingstor/sdk/request/impl/QSFormRequestBody.html new file mode 100644 index 0000000..40451d4 --- /dev/null +++ b/docs/com/qingstor/sdk/request/impl/QSFormRequestBody.html @@ -0,0 +1,294 @@ + + + + + + +QSFormRequestBody (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request.impl
+

类 QSFormRequestBody

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.request.impl.QSFormRequestBody
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    QSRequestBody
    +
    +
    +
    +
    public class QSFormRequestBody
    +extends java.lang.Object
    +implements QSRequestBody
    +
    +
    作者:
    +
    karooli
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      RequestBodygetRequestBody(java.lang.String contentType, + long contentLength, + java.lang.String method, + java.util.Map<java.lang.String,java.lang.Object> bodyParams, + java.util.Map<java.lang.String,java.lang.Object> queryParams) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSFormRequestBody

        +
        public QSFormRequestBody()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getRequestBody

        +
        public RequestBody getRequestBody(java.lang.String contentType,
        +                                  long contentLength,
        +                                  java.lang.String method,
        +                                  java.util.Map<java.lang.String,java.lang.Object> bodyParams,
        +                                  java.util.Map<java.lang.String,java.lang.Object> queryParams)
        +                           throws QSException
        +
        +
        指定者:
        +
        getRequestBody 在接口中 QSRequestBody
        +
        抛出:
        +
        QSException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/impl/QSMultiPartUploadRequestBody.html b/docs/com/qingstor/sdk/request/impl/QSMultiPartUploadRequestBody.html new file mode 100644 index 0000000..be05175 --- /dev/null +++ b/docs/com/qingstor/sdk/request/impl/QSMultiPartUploadRequestBody.html @@ -0,0 +1,312 @@ + + + + + + +QSMultiPartUploadRequestBody (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request.impl
+

类 QSMultiPartUploadRequestBody

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.request.impl.QSMultiPartUploadRequestBody
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    QSRequestBody
    +
    +
    +
    +
    public class QSMultiPartUploadRequestBody
    +extends java.lang.Object
    +implements QSRequestBody
    +
    +
    作者:
    +
    karooli
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.ObjectgetBodyContent(java.util.Map bodyContent) 
      RequestBodygetRequestBody(java.lang.String contentType, + long contentLength, + java.lang.String method, + java.util.Map<java.lang.String,java.lang.Object> bodyParams, + java.util.Map<java.lang.String,java.lang.Object> queryParams) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSMultiPartUploadRequestBody

        +
        public QSMultiPartUploadRequestBody()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getRequestBody

        +
        public RequestBody getRequestBody(java.lang.String contentType,
        +                                  long contentLength,
        +                                  java.lang.String method,
        +                                  java.util.Map<java.lang.String,java.lang.Object> bodyParams,
        +                                  java.util.Map<java.lang.String,java.lang.Object> queryParams)
        +                           throws QSException
        +
        +
        指定者:
        +
        getRequestBody 在接口中 QSRequestBody
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        getBodyContent

        +
        public java.lang.Object getBodyContent(java.util.Map bodyContent)
        +                                throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/impl/QSNormalRequestBody.html b/docs/com/qingstor/sdk/request/impl/QSNormalRequestBody.html new file mode 100644 index 0000000..faa11e6 --- /dev/null +++ b/docs/com/qingstor/sdk/request/impl/QSNormalRequestBody.html @@ -0,0 +1,312 @@ + + + + + + +QSNormalRequestBody (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.request.impl
+

类 QSNormalRequestBody

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.request.impl.QSNormalRequestBody
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    QSRequestBody
    +
    +
    +
    +
    public class QSNormalRequestBody
    +extends java.lang.Object
    +implements QSRequestBody
    +
    +
    作者:
    +
    karooli
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + +
      所有方法 静态方法 实例方法 具体方法 
      限定符和类型方法和说明
      static java.lang.ObjectgetBodyContent(java.util.Map bodyContent) 
      RequestBodygetRequestBody(java.lang.String contentType, + long contentLength, + java.lang.String method, + java.util.Map<java.lang.String,java.lang.Object> bodyParams, + java.util.Map<java.lang.String,java.lang.Object> queryParams) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSNormalRequestBody

        +
        public QSNormalRequestBody()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getRequestBody

        +
        public RequestBody getRequestBody(java.lang.String contentType,
        +                                  long contentLength,
        +                                  java.lang.String method,
        +                                  java.util.Map<java.lang.String,java.lang.Object> bodyParams,
        +                                  java.util.Map<java.lang.String,java.lang.Object> queryParams)
        +                           throws QSException
        +
        +
        指定者:
        +
        getRequestBody 在接口中 QSRequestBody
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        getBodyContent

        +
        public static java.lang.Object getBodyContent(java.util.Map bodyContent)
        +                                       throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/request/impl/package-frame.html b/docs/com/qingstor/sdk/request/impl/package-frame.html new file mode 100644 index 0000000..3c06cdf --- /dev/null +++ b/docs/com/qingstor/sdk/request/impl/package-frame.html @@ -0,0 +1,27 @@ + + + + + + +com.qingstor.sdk.request.impl (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.request.impl

+ + + diff --git a/docs/com/qingstor/sdk/request/impl/package-summary.html b/docs/com/qingstor/sdk/request/impl/package-summary.html new file mode 100644 index 0000000..45f1e47 --- /dev/null +++ b/docs/com/qingstor/sdk/request/impl/package-summary.html @@ -0,0 +1,165 @@ + + + + + + +com.qingstor.sdk.request.impl (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.request.impl

+
+
+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/request/impl/package-tree.html b/docs/com/qingstor/sdk/request/impl/package-tree.html new file mode 100644 index 0000000..18287b7 --- /dev/null +++ b/docs/com/qingstor/sdk/request/impl/package-tree.html @@ -0,0 +1,158 @@ + + + + + + +com.qingstor.sdk.request.impl 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.request.impl的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/request/package-frame.html b/docs/com/qingstor/sdk/request/package-frame.html new file mode 100644 index 0000000..77847d2 --- /dev/null +++ b/docs/com/qingstor/sdk/request/package-frame.html @@ -0,0 +1,38 @@ + + + + + + +com.qingstor.sdk.request (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.request

+ + + diff --git a/docs/com/qingstor/sdk/request/package-summary.html b/docs/com/qingstor/sdk/request/package-summary.html new file mode 100644 index 0000000..348a5d5 --- /dev/null +++ b/docs/com/qingstor/sdk/request/package-summary.html @@ -0,0 +1,209 @@ + + + + + + +com.qingstor.sdk.request (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.request

+
+
+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/request/package-tree.html b/docs/com/qingstor/sdk/request/package-tree.html new file mode 100644 index 0000000..ccdb300 --- /dev/null +++ b/docs/com/qingstor/sdk/request/package-tree.html @@ -0,0 +1,162 @@ + + + + + + +com.qingstor.sdk.request 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.request的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +

接口分层结构

+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.AbortMultipartUploadInput.html b/docs/com/qingstor/sdk/service/Bucket.AbortMultipartUploadInput.html new file mode 100644 index 0000000..990beff --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.AbortMultipartUploadInput.html @@ -0,0 +1,319 @@ + + + + + + +Bucket.AbortMultipartUploadInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.AbortMultipartUploadInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.AbortMultipartUploadInput
    +extends RequestInputModel
    +
    AbortMultipartUploadInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field UploadID Object multipart upload ID
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetUploadID() 
      voidsetUploadID(java.lang.String uploadID) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        AbortMultipartUploadInput

        +
        public AbortMultipartUploadInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setUploadID

        +
        public void setUploadID(java.lang.String uploadID)
        +
      • +
      + + + +
        +
      • +

        getUploadID

        +
        public java.lang.String getUploadID()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.AbortMultipartUploadOutput.html b/docs/com/qingstor/sdk/service/Bucket.AbortMultipartUploadOutput.html new file mode 100644 index 0000000..4fb64bc --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.AbortMultipartUploadOutput.html @@ -0,0 +1,256 @@ + + + + + + +Bucket.AbortMultipartUploadOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.AbortMultipartUploadOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.AbortMultipartUploadOutput
    +extends OutputModel
    +
    AbortMultipartUploadOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field UploadID Object multipart upload ID
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        AbortMultipartUploadOutput

        +
        public AbortMultipartUploadOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.CompleteMultipartUploadInput.html b/docs/com/qingstor/sdk/service/Bucket.CompleteMultipartUploadInput.html new file mode 100644 index 0000000..4bf8928 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.CompleteMultipartUploadInput.html @@ -0,0 +1,534 @@ + + + + + + +Bucket.CompleteMultipartUploadInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.CompleteMultipartUploadInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    直接已知子类:
    +
    UploadManager.CompleteMultipartUploadInput
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.CompleteMultipartUploadInput
    +extends RequestInputModel
    +
    CompleteMultipartUploadInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field ETag MD5sum of the object part
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field UploadID Object multipart upload ID
    + field ObjectParts Object parts
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CompleteMultipartUploadInput

        +
        public CompleteMultipartUploadInput()
        +
      • +
      + + + +
        +
      • +

        CompleteMultipartUploadInput

        +
        public CompleteMultipartUploadInput(java.lang.String multipart_upload_id,
        +                                    int partsCount,
        +                                    int startIndex)
        +
        The constructor will auto set values of upload id and body input.
        +
        +
        参数:
        +
        multipart_upload_id - upload id
        +
        partsCount - count of multi parts
        +
        startIndex - start of part number's index
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setUploadID

        +
        public void setUploadID(java.lang.String uploadID)
        +
      • +
      + + + +
        +
      • +

        getUploadID

        +
        public java.lang.String getUploadID()
        +
      • +
      + + + +
        +
      • +

        getCompleteMultipartUploadContent

        +
        public java.lang.String getCompleteMultipartUploadContent(int partsCount,
        +                                                          int startIndex)
        +
        You can get the json content to complete multipart uploading.
        +
        +
        参数:
        +
        partsCount - count of all the uploaded parts
        +
        startIndex - start of part number's index
        +
        返回:
        +
        content to complete multipart uploading
        +
        +
      • +
      + + + +
        +
      • +

        setETag

        +
        public void setETag(java.lang.String eTag)
        +
      • +
      + + + +
        +
      • +

        getETag

        +
        public java.lang.String getETag()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKey

        +
        public void setXQSEncryptionCustomerKey(java.lang.String xQSEncryptionCustomerKey)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKey

        +
        public java.lang.String getXQSEncryptionCustomerKey()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKeyMD5

        +
        public void setXQSEncryptionCustomerKeyMD5(java.lang.String xQSEncryptionCustomerKeyMD5)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKeyMD5

        +
        public java.lang.String getXQSEncryptionCustomerKeyMD5()
        +
      • +
      + + + +
        +
      • +

        getBodyInput

        +
        public java.lang.String getBodyInput()
        +
      • +
      + + + +
        +
      • +

        setBodyInput

        +
        public void setBodyInput(java.lang.String bodyInput)
        +
      • +
      + + + + + + + + + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.CompleteMultipartUploadOutput.html b/docs/com/qingstor/sdk/service/Bucket.CompleteMultipartUploadOutput.html new file mode 100644 index 0000000..20fe7af --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.CompleteMultipartUploadOutput.html @@ -0,0 +1,308 @@ + + + + + + +Bucket.CompleteMultipartUploadOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.CompleteMultipartUploadOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.CompleteMultipartUploadOutput
    +extends OutputModel
    +
    CompleteMultipartUploadOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field ETag MD5sum of the object part
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field UploadID Object multipart upload ID
    + field ObjectParts Object parts
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CompleteMultipartUploadOutput

        +
        public CompleteMultipartUploadOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.DeleteBucketCORSOutput.html b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketCORSOutput.html new file mode 100644 index 0000000..074c249 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketCORSOutput.html @@ -0,0 +1,255 @@ + + + + + + +Bucket.DeleteBucketCORSOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.DeleteBucketCORSOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.DeleteBucketCORSOutput
    +extends OutputModel
    +
    DeleteBucketCORSOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DeleteBucketCORSOutput

        +
        public DeleteBucketCORSOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.DeleteBucketExternalMirrorOutput.html b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketExternalMirrorOutput.html new file mode 100644 index 0000000..6bfaafb --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketExternalMirrorOutput.html @@ -0,0 +1,255 @@ + + + + + + +Bucket.DeleteBucketExternalMirrorOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.DeleteBucketExternalMirrorOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.DeleteBucketExternalMirrorOutput
    +extends OutputModel
    +
    DeleteBucketExternalMirrorOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DeleteBucketExternalMirrorOutput

        +
        public DeleteBucketExternalMirrorOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.DeleteBucketLifecycleOutput.html b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketLifecycleOutput.html new file mode 100644 index 0000000..63b93b7 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketLifecycleOutput.html @@ -0,0 +1,255 @@ + + + + + + +Bucket.DeleteBucketLifecycleOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.DeleteBucketLifecycleOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.DeleteBucketLifecycleOutput
    +extends OutputModel
    +
    DeleteBucketLifecycleOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DeleteBucketLifecycleOutput

        +
        public DeleteBucketLifecycleOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.DeleteBucketNotificationOutput.html b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketNotificationOutput.html new file mode 100644 index 0000000..2960b29 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketNotificationOutput.html @@ -0,0 +1,255 @@ + + + + + + +Bucket.DeleteBucketNotificationOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.DeleteBucketNotificationOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.DeleteBucketNotificationOutput
    +extends OutputModel
    +
    DeleteBucketNotificationOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DeleteBucketNotificationOutput

        +
        public DeleteBucketNotificationOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.DeleteBucketOutput.html b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketOutput.html new file mode 100644 index 0000000..eec51af --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketOutput.html @@ -0,0 +1,255 @@ + + + + + + +Bucket.DeleteBucketOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.DeleteBucketOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.DeleteBucketOutput
    +extends OutputModel
    +
    DeleteBucketOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DeleteBucketOutput

        +
        public DeleteBucketOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.DeleteBucketPolicyOutput.html b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketPolicyOutput.html new file mode 100644 index 0000000..0bf070a --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.DeleteBucketPolicyOutput.html @@ -0,0 +1,255 @@ + + + + + + +Bucket.DeleteBucketPolicyOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.DeleteBucketPolicyOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.DeleteBucketPolicyOutput
    +extends OutputModel
    +
    DeleteBucketPolicyOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DeleteBucketPolicyOutput

        +
        public DeleteBucketPolicyOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.DeleteMultipleObjectsInput.html b/docs/com/qingstor/sdk/service/Bucket.DeleteMultipleObjectsInput.html new file mode 100644 index 0000000..ba920c7 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.DeleteMultipleObjectsInput.html @@ -0,0 +1,399 @@ + + + + + + +Bucket.DeleteMultipleObjectsInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.DeleteMultipleObjectsInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.DeleteMultipleObjectsInput
    +extends RequestInputModel
    +
    DeleteMultipleObjectsInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field ContentMD5 Object MD5sum
    + field Objects A list of keys to delete
    + field Quiet Whether to return the list of deleted objects
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DeleteMultipleObjectsInput

        +
        public DeleteMultipleObjectsInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setContentMD5

        +
        public void setContentMD5(java.lang.String contentMD5)
        +
      • +
      + + + +
        +
      • +

        getContentMD5

        +
        public java.lang.String getContentMD5()
        +
      • +
      + + + +
        +
      • +

        getBodyInput

        +
        public java.lang.String getBodyInput()
        +
      • +
      + + + +
        +
      • +

        setBodyInput

        +
        public void setBodyInput(java.lang.String bodyInput)
        +
      • +
      + + + +
        +
      • +

        setObjects

        +
        public void setObjects(java.util.List<Types.KeyModel> objects)
        +
      • +
      + + + +
        +
      • +

        getObjects

        +
        public java.util.List<Types.KeyModel> getObjects()
        +
      • +
      + + + +
        +
      • +

        setQuiet

        +
        public void setQuiet(java.lang.Boolean quiet)
        +
      • +
      + + + +
        +
      • +

        getQuiet

        +
        public java.lang.Boolean getQuiet()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.DeleteMultipleObjectsOutput.html b/docs/com/qingstor/sdk/service/Bucket.DeleteMultipleObjectsOutput.html new file mode 100644 index 0000000..e252718 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.DeleteMultipleObjectsOutput.html @@ -0,0 +1,331 @@ + + + + + + +Bucket.DeleteMultipleObjectsOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.DeleteMultipleObjectsOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.DeleteMultipleObjectsOutput
    +extends OutputModel
    +
    DeleteMultipleObjectsOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field ContentMD5 Object MD5sum
    + field Objects A list of keys to delete
    + field Quiet Whether to return the list of deleted objects
    +
  • +
+
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.DeleteObjectOutput.html b/docs/com/qingstor/sdk/service/Bucket.DeleteObjectOutput.html new file mode 100644 index 0000000..707e6f5 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.DeleteObjectOutput.html @@ -0,0 +1,255 @@ + + + + + + +Bucket.DeleteObjectOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.DeleteObjectOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.DeleteObjectOutput
    +extends OutputModel
    +
    DeleteObjectOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DeleteObjectOutput

        +
        public DeleteObjectOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.GetBucketACLOutput.html b/docs/com/qingstor/sdk/service/Bucket.GetBucketACLOutput.html new file mode 100644 index 0000000..2577c3c --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.GetBucketACLOutput.html @@ -0,0 +1,328 @@ + + + + + + +Bucket.GetBucketACLOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.GetBucketACLOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.GetBucketACLOutput
    +extends OutputModel
    +
    GetBucketACLOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.GetBucketCORSOutput.html b/docs/com/qingstor/sdk/service/Bucket.GetBucketCORSOutput.html new file mode 100644 index 0000000..835fd37 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.GetBucketCORSOutput.html @@ -0,0 +1,302 @@ + + + + + + +Bucket.GetBucketCORSOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.GetBucketCORSOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.GetBucketCORSOutput
    +extends OutputModel
    +
    GetBucketCORSOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GetBucketCORSOutput

        +
        public GetBucketCORSOutput()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.GetBucketExternalMirrorOutput.html b/docs/com/qingstor/sdk/service/Bucket.GetBucketExternalMirrorOutput.html new file mode 100644 index 0000000..29e8312 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.GetBucketExternalMirrorOutput.html @@ -0,0 +1,302 @@ + + + + + + +Bucket.GetBucketExternalMirrorOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.GetBucketExternalMirrorOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.GetBucketExternalMirrorOutput
    +extends OutputModel
    +
    GetBucketExternalMirrorOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GetBucketExternalMirrorOutput

        +
        public GetBucketExternalMirrorOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setSourceSite

        +
        public void setSourceSite(java.lang.String sourceSite)
        +
      • +
      + + + +
        +
      • +

        getSourceSite

        +
        public java.lang.String getSourceSite()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.GetBucketLifecycleOutput.html b/docs/com/qingstor/sdk/service/Bucket.GetBucketLifecycleOutput.html new file mode 100644 index 0000000..9494243 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.GetBucketLifecycleOutput.html @@ -0,0 +1,302 @@ + + + + + + +Bucket.GetBucketLifecycleOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.GetBucketLifecycleOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.GetBucketLifecycleOutput
    +extends OutputModel
    +
    GetBucketLifecycleOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GetBucketLifecycleOutput

        +
        public GetBucketLifecycleOutput()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.GetBucketNotificationOutput.html b/docs/com/qingstor/sdk/service/Bucket.GetBucketNotificationOutput.html new file mode 100644 index 0000000..1680954 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.GetBucketNotificationOutput.html @@ -0,0 +1,302 @@ + + + + + + +Bucket.GetBucketNotificationOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.GetBucketNotificationOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.GetBucketNotificationOutput
    +extends OutputModel
    +
    GetBucketNotificationOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GetBucketNotificationOutput

        +
        public GetBucketNotificationOutput()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.GetBucketPolicyOutput.html b/docs/com/qingstor/sdk/service/Bucket.GetBucketPolicyOutput.html new file mode 100644 index 0000000..d5104be --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.GetBucketPolicyOutput.html @@ -0,0 +1,302 @@ + + + + + + +Bucket.GetBucketPolicyOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.GetBucketPolicyOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.GetBucketPolicyOutput
    +extends OutputModel
    +
    GetBucketPolicyOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GetBucketPolicyOutput

        +
        public GetBucketPolicyOutput()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.GetBucketStatisticsOutput.html b/docs/com/qingstor/sdk/service/Bucket.GetBucketStatisticsOutput.html new file mode 100644 index 0000000..f17fbe9 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.GetBucketStatisticsOutput.html @@ -0,0 +1,458 @@ + + + + + + +Bucket.GetBucketStatisticsOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.GetBucketStatisticsOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.GetBucketStatisticsOutput
    +extends OutputModel
    +
    GetBucketStatisticsOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GetBucketStatisticsOutput

        +
        public GetBucketStatisticsOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCount

        +
        public void setCount(java.lang.Long count)
        +
      • +
      + + + +
        +
      • +

        getCount

        +
        public java.lang.Long getCount()
        +
      • +
      + + + +
        +
      • +

        setCreated

        +
        public void setCreated(java.lang.String created)
        +
      • +
      + + + +
        +
      • +

        getCreated

        +
        public java.lang.String getCreated()
        +
      • +
      + + + +
        +
      • +

        setLocation

        +
        public void setLocation(java.lang.String location)
        +
      • +
      + + + +
        +
      • +

        getLocation

        +
        public java.lang.String getLocation()
        +
      • +
      + + + +
        +
      • +

        setName

        +
        public void setName(java.lang.String name)
        +
      • +
      + + + +
        +
      • +

        getName

        +
        public java.lang.String getName()
        +
      • +
      + + + +
        +
      • +

        setSize

        +
        public void setSize(java.lang.Long size)
        +
      • +
      + + + +
        +
      • +

        getSize

        +
        public java.lang.Long getSize()
        +
      • +
      + + + +
        +
      • +

        setStatus

        +
        public void setStatus(java.lang.String status)
        +
      • +
      + + + +
        +
      • +

        getStatus

        +
        public java.lang.String getStatus()
        +
      • +
      + + + +
        +
      • +

        setURL

        +
        public void setURL(java.lang.String uRL)
        +
      • +
      + + + +
        +
      • +

        getURL

        +
        public java.lang.String getURL()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.GetObjectInput.html b/docs/com/qingstor/sdk/service/Bucket.GetObjectInput.html new file mode 100644 index 0000000..437ebce --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.GetObjectInput.html @@ -0,0 +1,670 @@ + + + + + + +Bucket.GetObjectInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.GetObjectInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.GetObjectInput
    +extends RequestInputModel
    +
    GetObjectInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field IfMatch Check whether the ETag matches
    + field IfModifiedSince Check whether the object has been modified
    + field IfNoneMatch Check whether the ETag does not match
    + field IfUnmodifiedSince Check whether the object has not been modified
    + field Range Specified range of the object
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field ResponseCacheControl Specified the Cache-Control response header
    + field ResponseContentDisposition Specified the Content-Disposition response header
    + field ResponseContentEncoding Specified the Content-Encoding response header
    + field ResponseContentLanguage Specified the Content-Language response header
    + field ResponseContentType Specified the Content-Type response header
    + field ResponseExpires Specified the Expires response header
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GetObjectInput

        +
        public GetObjectInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setResponseCacheControl

        +
        public void setResponseCacheControl(java.lang.String responseCacheControl)
        +
      • +
      + + + +
        +
      • +

        getResponseCacheControl

        +
        public java.lang.String getResponseCacheControl()
        +
      • +
      + + + +
        +
      • +

        setResponseContentDisposition

        +
        public void setResponseContentDisposition(java.lang.String responseContentDisposition)
        +
      • +
      + + + +
        +
      • +

        getResponseContentDisposition

        +
        public java.lang.String getResponseContentDisposition()
        +
      • +
      + + + +
        +
      • +

        setResponseContentEncoding

        +
        public void setResponseContentEncoding(java.lang.String responseContentEncoding)
        +
      • +
      + + + +
        +
      • +

        getResponseContentEncoding

        +
        public java.lang.String getResponseContentEncoding()
        +
      • +
      + + + +
        +
      • +

        setResponseContentLanguage

        +
        public void setResponseContentLanguage(java.lang.String responseContentLanguage)
        +
      • +
      + + + +
        +
      • +

        getResponseContentLanguage

        +
        public java.lang.String getResponseContentLanguage()
        +
      • +
      + + + +
        +
      • +

        setResponseContentType

        +
        public void setResponseContentType(java.lang.String responseContentType)
        +
      • +
      + + + +
        +
      • +

        getResponseContentType

        +
        public java.lang.String getResponseContentType()
        +
      • +
      + + + +
        +
      • +

        setResponseExpires

        +
        public void setResponseExpires(java.lang.String responseExpires)
        +
      • +
      + + + +
        +
      • +

        getResponseExpires

        +
        public java.lang.String getResponseExpires()
        +
      • +
      + + + +
        +
      • +

        setIfMatch

        +
        public void setIfMatch(java.lang.String ifMatch)
        +
      • +
      + + + +
        +
      • +

        getIfMatch

        +
        public java.lang.String getIfMatch()
        +
      • +
      + + + +
        +
      • +

        setIfModifiedSince

        +
        public void setIfModifiedSince(java.lang.String ifModifiedSince)
        +
      • +
      + + + +
        +
      • +

        getIfModifiedSince

        +
        public java.lang.String getIfModifiedSince()
        +
      • +
      + + + +
        +
      • +

        setIfNoneMatch

        +
        public void setIfNoneMatch(java.lang.String ifNoneMatch)
        +
      • +
      + + + +
        +
      • +

        getIfNoneMatch

        +
        public java.lang.String getIfNoneMatch()
        +
      • +
      + + + +
        +
      • +

        setIfUnmodifiedSince

        +
        public void setIfUnmodifiedSince(java.lang.String ifUnmodifiedSince)
        +
      • +
      + + + +
        +
      • +

        getIfUnmodifiedSince

        +
        public java.lang.String getIfUnmodifiedSince()
        +
      • +
      + + + +
        +
      • +

        setRange

        +
        public void setRange(java.lang.String range)
        +
      • +
      + + + +
        +
      • +

        getRange

        +
        public java.lang.String getRange()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKey

        +
        public void setXQSEncryptionCustomerKey(java.lang.String xQSEncryptionCustomerKey)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKey

        +
        public java.lang.String getXQSEncryptionCustomerKey()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKeyMD5

        +
        public void setXQSEncryptionCustomerKeyMD5(java.lang.String xQSEncryptionCustomerKeyMD5)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKeyMD5

        +
        public java.lang.String getXQSEncryptionCustomerKeyMD5()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.GetObjectOutput.html b/docs/com/qingstor/sdk/service/Bucket.GetObjectOutput.html new file mode 100644 index 0000000..a594ac4 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.GetObjectOutput.html @@ -0,0 +1,906 @@ + + + + + + +Bucket.GetObjectOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.GetObjectOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.GetObjectOutput
    +extends OutputModel
    +
    GetObjectOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field IfMatch Check whether the ETag matches
    + field IfModifiedSince Check whether the object has been modified
    + field IfNoneMatch Check whether the ETag does not match
    + field IfUnmodifiedSince Check whether the object has not been modified
    + field Range Specified range of the object
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field ResponseCacheControl Specified the Cache-Control response header
    + field ResponseContentDisposition Specified the Content-Disposition response header
    + field ResponseContentEncoding Specified the Content-Encoding response header
    + field ResponseContentLanguage Specified the Content-Language response header
    + field ResponseContentType Specified the Content-Type response header
    + field ResponseExpires Specified the Expires response header
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GetObjectOutput

        +
        public GetObjectOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setResponseCacheControl

        +
        @Deprecated
        +public void setResponseCacheControl(java.lang.String responseCacheControl)
        +
        已过时。 
        +
        deprecated, please use setCacheControl(String cacheControl)
        +
        +
        参数:
        +
        responseCacheControl - cacheControl
        +
        +
      • +
      + + + +
        +
      • +

        getResponseCacheControl

        +
        @Deprecated
        +public java.lang.String getResponseCacheControl()
        +
        已过时。 
        +
        deprecated, please use getCacheControl()
        +
        +
        返回:
        +
        cacheControl
        +
        +
      • +
      + + + +
        +
      • +

        setResponseContentDisposition

        +
        @Deprecated
        +public void setResponseContentDisposition(java.lang.String responseContentDisposition)
        +
        已过时。 
        +
        deprecated, please use setContentDisposition(String contentDisposition)
        +
        +
        参数:
        +
        responseContentDisposition - contentDisposition
        +
        +
      • +
      + + + +
        +
      • +

        getResponseContentDisposition

        +
        @Deprecated
        +public java.lang.String getResponseContentDisposition()
        +
        已过时。 
        +
        deprecated, please use getContentDisposition()
        +
        +
        返回:
        +
        contentDisposition
        +
        +
      • +
      + + + +
        +
      • +

        setResponseContentEncoding

        +
        @Deprecated
        +public void setResponseContentEncoding(java.lang.String responseContentEncoding)
        +
        已过时。 
        +
        deprecated, please use setContentEncoding(String contentEncoding)
        +
        +
        参数:
        +
        responseContentEncoding - contentEncoding
        +
        +
      • +
      + + + +
        +
      • +

        getResponseContentEncoding

        +
        @Deprecated
        +public java.lang.String getResponseContentEncoding()
        +
        已过时。 
        +
        deprecated, please use getContentEncoding()
        +
        +
        返回:
        +
        contentEncoding
        +
        +
      • +
      + + + +
        +
      • +

        setResponseContentLanguage

        +
        @Deprecated
        +public void setResponseContentLanguage(java.lang.String responseContentLanguage)
        +
        已过时。 
        +
        deprecated, please use setContentLanguage(String contentLanguage)
        +
        +
        参数:
        +
        responseContentLanguage - contentLanguage
        +
        +
      • +
      + + + +
        +
      • +

        getResponseContentLanguage

        +
        @Deprecated
        +public java.lang.String getResponseContentLanguage()
        +
        已过时。 
        +
        deprecated, please use getContentLanguage()
        +
        +
        返回:
        +
        contentLanguage
        +
        +
      • +
      + + + +
        +
      • +

        setResponseContentType

        +
        @Deprecated
        +public void setResponseContentType(java.lang.String responseContentType)
        +
        已过时。 
        +
        deprecated, please use setContentType(String contentType)
        +
        +
        参数:
        +
        responseContentType - contentType
        +
        +
      • +
      + + + +
        +
      • +

        getResponseContentType

        +
        @Deprecated
        +public java.lang.String getResponseContentType()
        +
        已过时。 
        +
        deprecated, please use getContentType()
        +
        +
        返回:
        +
        contentType
        +
        +
      • +
      + + + +
        +
      • +

        setResponseExpires

        +
        @Deprecated
        +public void setResponseExpires(java.lang.String responseExpires)
        +
        已过时。 
        +
        deprecated, please use setExpires(String expires)
        +
        +
        参数:
        +
        responseExpires - expires
        +
        +
      • +
      + + + +
        +
      • +

        getResponseExpires

        +
        @Deprecated
        +public java.lang.String getResponseExpires()
        +
        已过时。 
        +
        deprecated, please use getExpires()
        +
        +
        返回:
        +
        expires
        +
        +
      • +
      + + + +
        +
      • +

        getBodyInputStream

        +
        public java.io.InputStream getBodyInputStream()
        +
        Get the stream will be downloaded.
        +
        +
        返回:
        +
        the stream will be downloaded
        +
        +
      • +
      + + + +
        +
      • +

        setBodyInputStream

        +
        public void setBodyInputStream(java.io.InputStream bodyInputStream)
        +
        Set the stream to download.
        +
        +
        参数:
        +
        bodyInputStream - stream to download
        +
        +
      • +
      + + + +
        +
      • +

        setCacheControl

        +
        public void setCacheControl(java.lang.String cacheControl)
        +
      • +
      + + + +
        +
      • +

        getCacheControl

        +
        public java.lang.String getCacheControl()
        +
      • +
      + + + +
        +
      • +

        setContentDisposition

        +
        public void setContentDisposition(java.lang.String contentDisposition)
        +
      • +
      + + + +
        +
      • +

        getContentDisposition

        +
        public java.lang.String getContentDisposition()
        +
      • +
      + + + +
        +
      • +

        setContentEncoding

        +
        public void setContentEncoding(java.lang.String contentEncoding)
        +
      • +
      + + + +
        +
      • +

        getContentEncoding

        +
        public java.lang.String getContentEncoding()
        +
      • +
      + + + +
        +
      • +

        setContentLanguage

        +
        public void setContentLanguage(java.lang.String contentLanguage)
        +
      • +
      + + + +
        +
      • +

        getContentLanguage

        +
        public java.lang.String getContentLanguage()
        +
      • +
      + + + +
        +
      • +

        setContentLength

        +
        public void setContentLength(java.lang.Long contentLength)
        +
      • +
      + + + +
        +
      • +

        getContentLength

        +
        public java.lang.Long getContentLength()
        +
      • +
      + + + +
        +
      • +

        setContentRange

        +
        public void setContentRange(java.lang.String contentRange)
        +
      • +
      + + + +
        +
      • +

        getContentRange

        +
        public java.lang.String getContentRange()
        +
      • +
      + + + +
        +
      • +

        setContentType

        +
        public void setContentType(java.lang.String contentType)
        +
      • +
      + + + +
        +
      • +

        getContentType

        +
        public java.lang.String getContentType()
        +
      • +
      + + + +
        +
      • +

        setETag

        +
        public void setETag(java.lang.String eTag)
        +
      • +
      + + + +
        +
      • +

        getETag

        +
        public java.lang.String getETag()
        +
      • +
      + + + +
        +
      • +

        setExpires

        +
        public void setExpires(java.lang.String expires)
        +
      • +
      + + + +
        +
      • +

        getExpires

        +
        public java.lang.String getExpires()
        +
      • +
      + + + +
        +
      • +

        setLastModified

        +
        public void setLastModified(java.lang.String lastModified)
        +
      • +
      + + + +
        +
      • +

        getLastModified

        +
        public java.lang.String getLastModified()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      + + + +
        +
      • +

        setXQSStorageClass

        +
        public void setXQSStorageClass(java.lang.String xQSStorageClass)
        +
      • +
      + + + +
        +
      • +

        getXQSStorageClass

        +
        public java.lang.String getXQSStorageClass()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.HeadBucketOutput.html b/docs/com/qingstor/sdk/service/Bucket.HeadBucketOutput.html new file mode 100644 index 0000000..b279d53 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.HeadBucketOutput.html @@ -0,0 +1,255 @@ + + + + + + +Bucket.HeadBucketOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.HeadBucketOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.HeadBucketOutput
    +extends OutputModel
    +
    HeadBucketOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        HeadBucketOutput

        +
        public HeadBucketOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.HeadObjectInput.html b/docs/com/qingstor/sdk/service/Bucket.HeadObjectInput.html new file mode 100644 index 0000000..bdd71c3 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.HeadObjectInput.html @@ -0,0 +1,481 @@ + + + + + + +Bucket.HeadObjectInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.HeadObjectInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.HeadObjectInput
    +extends RequestInputModel
    +
    HeadObjectInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field IfMatch Check whether the ETag matches
    + field IfModifiedSince Check whether the object has been modified
    + field IfNoneMatch Check whether the ETag does not match
    + field IfUnmodifiedSince Check whether the object has not been modified
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        HeadObjectInput

        +
        public HeadObjectInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setIfMatch

        +
        public void setIfMatch(java.lang.String ifMatch)
        +
      • +
      + + + +
        +
      • +

        getIfMatch

        +
        public java.lang.String getIfMatch()
        +
      • +
      + + + +
        +
      • +

        setIfModifiedSince

        +
        public void setIfModifiedSince(java.lang.String ifModifiedSince)
        +
      • +
      + + + +
        +
      • +

        getIfModifiedSince

        +
        public java.lang.String getIfModifiedSince()
        +
      • +
      + + + +
        +
      • +

        setIfNoneMatch

        +
        public void setIfNoneMatch(java.lang.String ifNoneMatch)
        +
      • +
      + + + +
        +
      • +

        getIfNoneMatch

        +
        public java.lang.String getIfNoneMatch()
        +
      • +
      + + + +
        +
      • +

        setIfUnmodifiedSince

        +
        public void setIfUnmodifiedSince(java.lang.String ifUnmodifiedSince)
        +
      • +
      + + + +
        +
      • +

        getIfUnmodifiedSince

        +
        public java.lang.String getIfUnmodifiedSince()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKey

        +
        public void setXQSEncryptionCustomerKey(java.lang.String xQSEncryptionCustomerKey)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKey

        +
        public java.lang.String getXQSEncryptionCustomerKey()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKeyMD5

        +
        public void setXQSEncryptionCustomerKeyMD5(java.lang.String xQSEncryptionCustomerKeyMD5)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKeyMD5

        +
        public java.lang.String getXQSEncryptionCustomerKeyMD5()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.HeadObjectOutput.html b/docs/com/qingstor/sdk/service/Bucket.HeadObjectOutput.html new file mode 100644 index 0000000..2134765 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.HeadObjectOutput.html @@ -0,0 +1,439 @@ + + + + + + +Bucket.HeadObjectOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.HeadObjectOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.HeadObjectOutput
    +extends OutputModel
    +
    HeadObjectOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field IfMatch Check whether the ETag matches
    + field IfModifiedSince Check whether the object has been modified
    + field IfNoneMatch Check whether the ETag does not match
    + field IfUnmodifiedSince Check whether the object has not been modified
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        HeadObjectOutput

        +
        public HeadObjectOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setContentLength

        +
        public void setContentLength(java.lang.Long contentLength)
        +
      • +
      + + + +
        +
      • +

        getContentLength

        +
        public java.lang.Long getContentLength()
        +
      • +
      + + + +
        +
      • +

        setContentType

        +
        public void setContentType(java.lang.String contentType)
        +
      • +
      + + + +
        +
      • +

        getContentType

        +
        public java.lang.String getContentType()
        +
      • +
      + + + +
        +
      • +

        setETag

        +
        public void setETag(java.lang.String eTag)
        +
      • +
      + + + +
        +
      • +

        getETag

        +
        public java.lang.String getETag()
        +
      • +
      + + + +
        +
      • +

        setLastModified

        +
        public void setLastModified(java.lang.String lastModified)
        +
      • +
      + + + +
        +
      • +

        getLastModified

        +
        public java.lang.String getLastModified()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      + + + +
        +
      • +

        setXQSStorageClass

        +
        public void setXQSStorageClass(java.lang.String xQSStorageClass)
        +
      • +
      + + + +
        +
      • +

        getXQSStorageClass

        +
        public java.lang.String getXQSStorageClass()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.ImageProcessInput.html b/docs/com/qingstor/sdk/service/Bucket.ImageProcessInput.html new file mode 100644 index 0000000..86e0a19 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.ImageProcessInput.html @@ -0,0 +1,508 @@ + + + + + + +Bucket.ImageProcessInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.ImageProcessInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.ImageProcessInput
    +extends RequestInputModel
    +
    ImageProcessInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field IfModifiedSince Check whether the object has been modified
    + field Action Image process action
    + field ResponseCacheControl Specified the Cache-Control response header
    + field ResponseContentDisposition Specified the Content-Disposition response header
    + field ResponseContentEncoding Specified the Content-Encoding response header
    + field ResponseContentLanguage Specified the Content-Language response header
    + field ResponseContentType Specified the Content-Type response header
    + field ResponseExpires Specified the Expires response header
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ImageProcessInput

        +
        public ImageProcessInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setAction

        +
        public void setAction(java.lang.String action)
        +
      • +
      + + + +
        +
      • +

        getAction

        +
        public java.lang.String getAction()
        +
      • +
      + + + +
        +
      • +

        setResponseCacheControl

        +
        public void setResponseCacheControl(java.lang.String responseCacheControl)
        +
      • +
      + + + +
        +
      • +

        getResponseCacheControl

        +
        public java.lang.String getResponseCacheControl()
        +
      • +
      + + + +
        +
      • +

        setResponseContentDisposition

        +
        public void setResponseContentDisposition(java.lang.String responseContentDisposition)
        +
      • +
      + + + +
        +
      • +

        getResponseContentDisposition

        +
        public java.lang.String getResponseContentDisposition()
        +
      • +
      + + + +
        +
      • +

        setResponseContentEncoding

        +
        public void setResponseContentEncoding(java.lang.String responseContentEncoding)
        +
      • +
      + + + +
        +
      • +

        getResponseContentEncoding

        +
        public java.lang.String getResponseContentEncoding()
        +
      • +
      + + + +
        +
      • +

        setResponseContentLanguage

        +
        public void setResponseContentLanguage(java.lang.String responseContentLanguage)
        +
      • +
      + + + +
        +
      • +

        getResponseContentLanguage

        +
        public java.lang.String getResponseContentLanguage()
        +
      • +
      + + + +
        +
      • +

        setResponseContentType

        +
        public void setResponseContentType(java.lang.String responseContentType)
        +
      • +
      + + + +
        +
      • +

        getResponseContentType

        +
        public java.lang.String getResponseContentType()
        +
      • +
      + + + +
        +
      • +

        setResponseExpires

        +
        public void setResponseExpires(java.lang.String responseExpires)
        +
      • +
      + + + +
        +
      • +

        getResponseExpires

        +
        public java.lang.String getResponseExpires()
        +
      • +
      + + + +
        +
      • +

        setIfModifiedSince

        +
        public void setIfModifiedSince(java.lang.String ifModifiedSince)
        +
      • +
      + + + +
        +
      • +

        getIfModifiedSince

        +
        public java.lang.String getIfModifiedSince()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.ImageProcessOutput.html b/docs/com/qingstor/sdk/service/Bucket.ImageProcessOutput.html new file mode 100644 index 0000000..3ab712d --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.ImageProcessOutput.html @@ -0,0 +1,350 @@ + + + + + + +Bucket.ImageProcessOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.ImageProcessOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.ImageProcessOutput
    +extends OutputModel
    +
    ImageProcessOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field IfModifiedSince Check whether the object has been modified
    + field Action Image process action
    + field ResponseCacheControl Specified the Cache-Control response header
    + field ResponseContentDisposition Specified the Content-Disposition response header
    + field ResponseContentEncoding Specified the Content-Encoding response header
    + field ResponseContentLanguage Specified the Content-Language response header
    + field ResponseContentType Specified the Content-Type response header
    + field ResponseExpires Specified the Expires response header
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ImageProcessOutput

        +
        public ImageProcessOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getBodyInputStream

        +
        public java.io.InputStream getBodyInputStream()
        +
        Get the stream will be downloaded.
        +
        +
        返回:
        +
        the stream will be downloaded
        +
        +
      • +
      + + + +
        +
      • +

        setBodyInputStream

        +
        public void setBodyInputStream(java.io.InputStream bodyInputStream)
        +
        Set the stream to download.
        +
        +
        参数:
        +
        bodyInputStream - stream to download
        +
        +
      • +
      + + + +
        +
      • +

        setContentLength

        +
        public void setContentLength(java.lang.Long contentLength)
        +
      • +
      + + + +
        +
      • +

        getContentLength

        +
        public java.lang.Long getContentLength()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.InitiateMultipartUploadInput.html b/docs/com/qingstor/sdk/service/Bucket.InitiateMultipartUploadInput.html new file mode 100644 index 0000000..eac1629 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.InitiateMultipartUploadInput.html @@ -0,0 +1,427 @@ + + + + + + +Bucket.InitiateMultipartUploadInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.InitiateMultipartUploadInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.InitiateMultipartUploadInput
    +extends RequestInputModel
    +
    InitiateMultipartUploadInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field ContentType Object content type
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field XQSStorageClass Specify the storage class for object
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        InitiateMultipartUploadInput

        +
        public InitiateMultipartUploadInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setContentType

        +
        public void setContentType(java.lang.String contentType)
        +
      • +
      + + + +
        +
      • +

        getContentType

        +
        public java.lang.String getContentType()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKey

        +
        public void setXQSEncryptionCustomerKey(java.lang.String xQSEncryptionCustomerKey)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKey

        +
        public java.lang.String getXQSEncryptionCustomerKey()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKeyMD5

        +
        public void setXQSEncryptionCustomerKeyMD5(java.lang.String xQSEncryptionCustomerKeyMD5)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKeyMD5

        +
        public java.lang.String getXQSEncryptionCustomerKeyMD5()
        +
      • +
      + + + +
        +
      • +

        setXQSStorageClass

        +
        public void setXQSStorageClass(java.lang.String xQSStorageClass)
        +
      • +
      + + + +
        +
      • +

        getXQSStorageClass

        +
        public java.lang.String getXQSStorageClass()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.InitiateMultipartUploadOutput.html b/docs/com/qingstor/sdk/service/Bucket.InitiateMultipartUploadOutput.html new file mode 100644 index 0000000..2e07cc4 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.InitiateMultipartUploadOutput.html @@ -0,0 +1,385 @@ + + + + + + +Bucket.InitiateMultipartUploadOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.InitiateMultipartUploadOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.InitiateMultipartUploadOutput
    +extends OutputModel
    +
    InitiateMultipartUploadOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field ContentType Object content type
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field XQSStorageClass Specify the storage class for object
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        InitiateMultipartUploadOutput

        +
        public InitiateMultipartUploadOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setBucket

        +
        public void setBucket(java.lang.String bucket)
        +
      • +
      + + + +
        +
      • +

        getBucket

        +
        public java.lang.String getBucket()
        +
      • +
      + + + +
        +
      • +

        setKey

        +
        public void setKey(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getKey

        +
        public java.lang.String getKey()
        +
      • +
      + + + +
        +
      • +

        setUploadID

        +
        public void setUploadID(java.lang.String uploadID)
        +
      • +
      + + + +
        +
      • +

        getUploadID

        +
        public java.lang.String getUploadID()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.ListMultipartInput.html b/docs/com/qingstor/sdk/service/Bucket.ListMultipartInput.html new file mode 100644 index 0000000..2386eb6 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.ListMultipartInput.html @@ -0,0 +1,373 @@ + + + + + + +Bucket.ListMultipartInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.ListMultipartInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.ListMultipartInput
    +extends RequestInputModel
    +
    ListMultipartInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Limit Limit results count
    + field PartNumberMarker Object multipart upload part number
    + field UploadID Object multipart upload ID
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ListMultipartInput

        +
        public ListMultipartInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setLimit

        +
        public void setLimit(java.lang.Integer limit)
        +
      • +
      + + + +
        +
      • +

        getLimit

        +
        public java.lang.Integer getLimit()
        +
      • +
      + + + +
        +
      • +

        setPartNumberMarker

        +
        public void setPartNumberMarker(java.lang.Integer partNumberMarker)
        +
      • +
      + + + +
        +
      • +

        getPartNumberMarker

        +
        public java.lang.Integer getPartNumberMarker()
        +
      • +
      + + + +
        +
      • +

        setUploadID

        +
        public void setUploadID(java.lang.String uploadID)
        +
      • +
      + + + +
        +
      • +

        getUploadID

        +
        public java.lang.String getUploadID()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.ListMultipartOutput.html b/docs/com/qingstor/sdk/service/Bucket.ListMultipartOutput.html new file mode 100644 index 0000000..7518007 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.ListMultipartOutput.html @@ -0,0 +1,331 @@ + + + + + + +Bucket.ListMultipartOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.ListMultipartOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.ListMultipartOutput
    +extends OutputModel
    +
    ListMultipartOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Limit Limit results count
    + field PartNumberMarker Object multipart upload part number
    + field UploadID Object multipart upload ID
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ListMultipartOutput

        +
        public ListMultipartOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCount

        +
        public void setCount(java.lang.Integer count)
        +
      • +
      + + + +
        +
      • +

        getCount

        +
        public java.lang.Integer getCount()
        +
      • +
      + + + + + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.ListMultipartUploadsInput.html b/docs/com/qingstor/sdk/service/Bucket.ListMultipartUploadsInput.html new file mode 100644 index 0000000..9c6b4f0 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.ListMultipartUploadsInput.html @@ -0,0 +1,429 @@ + + + + + + +Bucket.ListMultipartUploadsInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.ListMultipartUploadsInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.ListMultipartUploadsInput
    +extends RequestInputModel
    +
    ListMultipartUploadsInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Delimiter Put all keys that share a common prefix into a list
    + field KeyMarker Limit results returned from the first key after key_marker sorted by + alphabetical order
    + field Limit Results count limit
    + field Prefix Limits results to keys that begin with the prefix
    + field UploadIDMarker Limit results returned from the first uploading segment after + upload_id_marker sorted by the time of upload_id
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ListMultipartUploadsInput

        +
        public ListMultipartUploadsInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setDelimiter

        +
        public void setDelimiter(java.lang.String delimiter)
        +
      • +
      + + + +
        +
      • +

        getDelimiter

        +
        public java.lang.String getDelimiter()
        +
      • +
      + + + +
        +
      • +

        setKeyMarker

        +
        public void setKeyMarker(java.lang.String keyMarker)
        +
      • +
      + + + +
        +
      • +

        getKeyMarker

        +
        public java.lang.String getKeyMarker()
        +
      • +
      + + + +
        +
      • +

        setLimit

        +
        public void setLimit(java.lang.Integer limit)
        +
      • +
      + + + +
        +
      • +

        getLimit

        +
        public java.lang.Integer getLimit()
        +
      • +
      + + + +
        +
      • +

        setPrefix

        +
        public void setPrefix(java.lang.String prefix)
        +
      • +
      + + + +
        +
      • +

        getPrefix

        +
        public java.lang.String getPrefix()
        +
      • +
      + + + +
        +
      • +

        setUploadIDMarker

        +
        public void setUploadIDMarker(java.lang.String uploadIDMarker)
        +
      • +
      + + + +
        +
      • +

        getUploadIDMarker

        +
        public java.lang.String getUploadIDMarker()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.ListMultipartUploadsOutput.html b/docs/com/qingstor/sdk/service/Bucket.ListMultipartUploadsOutput.html new file mode 100644 index 0000000..39f021d --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.ListMultipartUploadsOutput.html @@ -0,0 +1,517 @@ + + + + + + +Bucket.ListMultipartUploadsOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.ListMultipartUploadsOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.ListMultipartUploadsOutput
    +extends OutputModel
    +
    ListMultipartUploadsOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Delimiter Put all keys that share a common prefix into a list
    + field KeyMarker Limit results returned from the first key after key_marker sorted by + alphabetical order
    + field Limit Results count limit
    + field Prefix Limits results to keys that begin with the prefix
    + field UploadIDMarker Limit results returned from the first uploading segment after + upload_id_marker sorted by the time of upload_id
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ListMultipartUploadsOutput

        +
        public ListMultipartUploadsOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCommonPrefixes

        +
        public void setCommonPrefixes(java.util.List<java.lang.String> commonPrefixes)
        +
      • +
      + + + +
        +
      • +

        getCommonPrefixes

        +
        public java.util.List<java.lang.String> getCommonPrefixes()
        +
      • +
      + + + +
        +
      • +

        setDelimiter

        +
        public void setDelimiter(java.lang.String delimiter)
        +
      • +
      + + + +
        +
      • +

        getDelimiter

        +
        public java.lang.String getDelimiter()
        +
      • +
      + + + +
        +
      • +

        setLimit

        +
        public void setLimit(java.lang.Integer limit)
        +
      • +
      + + + +
        +
      • +

        getLimit

        +
        public java.lang.Integer getLimit()
        +
      • +
      + + + +
        +
      • +

        setMarker

        +
        public void setMarker(java.lang.String marker)
        +
      • +
      + + + +
        +
      • +

        getMarker

        +
        public java.lang.String getMarker()
        +
      • +
      + + + +
        +
      • +

        setName

        +
        public void setName(java.lang.String name)
        +
      • +
      + + + +
        +
      • +

        getName

        +
        public java.lang.String getName()
        +
      • +
      + + + +
        +
      • +

        setNextKeyMarker

        +
        public void setNextKeyMarker(java.lang.String nextKeyMarker)
        +
      • +
      + + + +
        +
      • +

        getNextKeyMarker

        +
        public java.lang.String getNextKeyMarker()
        +
      • +
      + + + +
        +
      • +

        setNextUploadIDMarker

        +
        public void setNextUploadIDMarker(java.lang.String nextUploadIDMarker)
        +
      • +
      + + + +
        +
      • +

        getNextUploadIDMarker

        +
        public java.lang.String getNextUploadIDMarker()
        +
      • +
      + + + +
        +
      • +

        setPrefix

        +
        public void setPrefix(java.lang.String prefix)
        +
      • +
      + + + +
        +
      • +

        getPrefix

        +
        public java.lang.String getPrefix()
        +
      • +
      + + + + + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.ListObjectsInput.html b/docs/com/qingstor/sdk/service/Bucket.ListObjectsInput.html new file mode 100644 index 0000000..6d8cea5 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.ListObjectsInput.html @@ -0,0 +1,400 @@ + + + + + + +Bucket.ListObjectsInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.ListObjectsInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.ListObjectsInput
    +extends RequestInputModel
    +
    ListObjectsInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Delimiter Put all keys that share a common prefix into a list
    + field Limit Results count limit
    + field Marker Limit results to keys that start at this marker
    + field Prefix Limits results to keys that begin with the prefix
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetDelimiter() 
      java.lang.IntegergetLimit() 
      java.lang.StringgetMarker() 
      java.lang.StringgetPrefix() 
      voidsetDelimiter(java.lang.String delimiter) 
      voidsetLimit(java.lang.Integer limit) 
      voidsetMarker(java.lang.String marker) 
      voidsetPrefix(java.lang.String prefix) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ListObjectsInput

        +
        public ListObjectsInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setDelimiter

        +
        public void setDelimiter(java.lang.String delimiter)
        +
      • +
      + + + +
        +
      • +

        getDelimiter

        +
        public java.lang.String getDelimiter()
        +
      • +
      + + + +
        +
      • +

        setLimit

        +
        public void setLimit(java.lang.Integer limit)
        +
      • +
      + + + +
        +
      • +

        getLimit

        +
        public java.lang.Integer getLimit()
        +
      • +
      + + + +
        +
      • +

        setMarker

        +
        public void setMarker(java.lang.String marker)
        +
      • +
      + + + +
        +
      • +

        getMarker

        +
        public java.lang.String getMarker()
        +
      • +
      + + + +
        +
      • +

        setPrefix

        +
        public void setPrefix(java.lang.String prefix)
        +
      • +
      + + + +
        +
      • +

        getPrefix

        +
        public java.lang.String getPrefix()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.ListObjectsOutput.html b/docs/com/qingstor/sdk/service/Bucket.ListObjectsOutput.html new file mode 100644 index 0000000..d3505fe --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.ListObjectsOutput.html @@ -0,0 +1,540 @@ + + + + + + +Bucket.ListObjectsOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.ListObjectsOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.ListObjectsOutput
    +extends OutputModel
    +
    ListObjectsOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Delimiter Put all keys that share a common prefix into a list
    + field Limit Results count limit
    + field Marker Limit results to keys that start at this marker
    + field Prefix Limits results to keys that begin with the prefix
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ListObjectsOutput

        +
        public ListObjectsOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCommonPrefixes

        +
        public void setCommonPrefixes(java.util.List<java.lang.String> commonPrefixes)
        +
      • +
      + + + +
        +
      • +

        getCommonPrefixes

        +
        public java.util.List<java.lang.String> getCommonPrefixes()
        +
      • +
      + + + +
        +
      • +

        setDelimiter

        +
        public void setDelimiter(java.lang.String delimiter)
        +
      • +
      + + + +
        +
      • +

        getDelimiter

        +
        public java.lang.String getDelimiter()
        +
      • +
      + + + +
        +
      • +

        setHasMore

        +
        public void setHasMore(java.lang.Boolean hasMore)
        +
      • +
      + + + +
        +
      • +

        getHasMore

        +
        public java.lang.Boolean getHasMore()
        +
      • +
      + + + +
        +
      • +

        setKeys

        +
        public void setKeys(java.util.List<Types.KeyModel> keys)
        +
      • +
      + + + + + + + +
        +
      • +

        setLimit

        +
        public void setLimit(java.lang.Integer limit)
        +
      • +
      + + + +
        +
      • +

        getLimit

        +
        public java.lang.Integer getLimit()
        +
      • +
      + + + +
        +
      • +

        setMarker

        +
        public void setMarker(java.lang.String marker)
        +
      • +
      + + + +
        +
      • +

        getMarker

        +
        public java.lang.String getMarker()
        +
      • +
      + + + +
        +
      • +

        setName

        +
        public void setName(java.lang.String name)
        +
      • +
      + + + +
        +
      • +

        getName

        +
        public java.lang.String getName()
        +
      • +
      + + + +
        +
      • +

        setNextMarker

        +
        public void setNextMarker(java.lang.String nextMarker)
        +
      • +
      + + + +
        +
      • +

        getNextMarker

        +
        public java.lang.String getNextMarker()
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        setPrefix

        +
        public void setPrefix(java.lang.String prefix)
        +
      • +
      + + + +
        +
      • +

        getPrefix

        +
        public java.lang.String getPrefix()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.OptionsObjectInput.html b/docs/com/qingstor/sdk/service/Bucket.OptionsObjectInput.html new file mode 100644 index 0000000..900a4de --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.OptionsObjectInput.html @@ -0,0 +1,373 @@ + + + + + + +Bucket.OptionsObjectInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.OptionsObjectInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.OptionsObjectInput
    +extends RequestInputModel
    +
    OptionsObjectInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field AccessControlRequestHeaders Request headers
    + field AccessControlRequestMethod Request method
    + field Origin Request origin
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        OptionsObjectInput

        +
        public OptionsObjectInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setAccessControlRequestHeaders

        +
        public void setAccessControlRequestHeaders(java.lang.String accessControlRequestHeaders)
        +
      • +
      + + + +
        +
      • +

        getAccessControlRequestHeaders

        +
        public java.lang.String getAccessControlRequestHeaders()
        +
      • +
      + + + +
        +
      • +

        setAccessControlRequestMethod

        +
        public void setAccessControlRequestMethod(java.lang.String accessControlRequestMethod)
        +
      • +
      + + + +
        +
      • +

        getAccessControlRequestMethod

        +
        public java.lang.String getAccessControlRequestMethod()
        +
      • +
      + + + +
        +
      • +

        setOrigin

        +
        public void setOrigin(java.lang.String origin)
        +
      • +
      + + + +
        +
      • +

        getOrigin

        +
        public java.lang.String getOrigin()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.OptionsObjectOutput.html b/docs/com/qingstor/sdk/service/Bucket.OptionsObjectOutput.html new file mode 100644 index 0000000..dfde3dc --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.OptionsObjectOutput.html @@ -0,0 +1,409 @@ + + + + + + +Bucket.OptionsObjectOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.OptionsObjectOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.OptionsObjectOutput
    +extends OutputModel
    +
    OptionsObjectOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field AccessControlRequestHeaders Request headers
    + field AccessControlRequestMethod Request method
    + field Origin Request origin
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        OptionsObjectOutput

        +
        public OptionsObjectOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setAccessControlAllowHeaders

        +
        public void setAccessControlAllowHeaders(java.lang.String accessControlAllowHeaders)
        +
      • +
      + + + +
        +
      • +

        getAccessControlAllowHeaders

        +
        public java.lang.String getAccessControlAllowHeaders()
        +
      • +
      + + + +
        +
      • +

        setAccessControlAllowMethods

        +
        public void setAccessControlAllowMethods(java.lang.String accessControlAllowMethods)
        +
      • +
      + + + +
        +
      • +

        getAccessControlAllowMethods

        +
        public java.lang.String getAccessControlAllowMethods()
        +
      • +
      + + + +
        +
      • +

        setAccessControlAllowOrigin

        +
        public void setAccessControlAllowOrigin(java.lang.String accessControlAllowOrigin)
        +
      • +
      + + + +
        +
      • +

        getAccessControlAllowOrigin

        +
        public java.lang.String getAccessControlAllowOrigin()
        +
      • +
      + + + +
        +
      • +

        setAccessControlExposeHeaders

        +
        public void setAccessControlExposeHeaders(java.lang.String accessControlExposeHeaders)
        +
      • +
      + + + +
        +
      • +

        getAccessControlExposeHeaders

        +
        public java.lang.String getAccessControlExposeHeaders()
        +
      • +
      + + + +
        +
      • +

        setAccessControlMaxAge

        +
        public void setAccessControlMaxAge(java.lang.String accessControlMaxAge)
        +
      • +
      + + + +
        +
      • +

        getAccessControlMaxAge

        +
        public java.lang.String getAccessControlMaxAge()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketACLInput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketACLInput.html new file mode 100644 index 0000000..f26b8f6 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketACLInput.html @@ -0,0 +1,345 @@ + + + + + + +Bucket.PutBucketACLInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketACLInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketACLInput
    +extends RequestInputModel
    +
    PutBucketACLInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field ACL Bucket ACL rules
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketACLInput

        +
        public PutBucketACLInput()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketACLOutput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketACLOutput.html new file mode 100644 index 0000000..482f4ec --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketACLOutput.html @@ -0,0 +1,256 @@ + + + + + + +Bucket.PutBucketACLOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketACLOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketACLOutput
    +extends OutputModel
    +
    PutBucketACLOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field ACL Bucket ACL rules
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketACLOutput

        +
        public PutBucketACLOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketCORSInput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketCORSInput.html new file mode 100644 index 0000000..0ca8315 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketCORSInput.html @@ -0,0 +1,345 @@ + + + + + + +Bucket.PutBucketCORSInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketCORSInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketCORSInput
    +extends RequestInputModel
    +
    PutBucketCORSInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field CORSRules Bucket CORS rules
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketCORSInput

        +
        public PutBucketCORSInput()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketCORSOutput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketCORSOutput.html new file mode 100644 index 0000000..baf0dc4 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketCORSOutput.html @@ -0,0 +1,256 @@ + + + + + + +Bucket.PutBucketCORSOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketCORSOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketCORSOutput
    +extends OutputModel
    +
    PutBucketCORSOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field CORSRules Bucket CORS rules
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketCORSOutput

        +
        public PutBucketCORSOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketExternalMirrorInput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketExternalMirrorInput.html new file mode 100644 index 0000000..21efb1d --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketExternalMirrorInput.html @@ -0,0 +1,345 @@ + + + + + + +Bucket.PutBucketExternalMirrorInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketExternalMirrorInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketExternalMirrorInput
    +extends RequestInputModel
    +
    PutBucketExternalMirrorInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field SourceSite Source site url
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketExternalMirrorInput

        +
        public PutBucketExternalMirrorInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getBodyInput

        +
        public java.lang.String getBodyInput()
        +
      • +
      + + + +
        +
      • +

        setBodyInput

        +
        public void setBodyInput(java.lang.String bodyInput)
        +
      • +
      + + + +
        +
      • +

        setSourceSite

        +
        public void setSourceSite(java.lang.String sourceSite)
        +
      • +
      + + + +
        +
      • +

        getSourceSite

        +
        public java.lang.String getSourceSite()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketExternalMirrorOutput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketExternalMirrorOutput.html new file mode 100644 index 0000000..61e6d01 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketExternalMirrorOutput.html @@ -0,0 +1,256 @@ + + + + + + +Bucket.PutBucketExternalMirrorOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketExternalMirrorOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketExternalMirrorOutput
    +extends OutputModel
    +
    PutBucketExternalMirrorOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field SourceSite Source site url
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketExternalMirrorOutput

        +
        public PutBucketExternalMirrorOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketLifecycleInput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketLifecycleInput.html new file mode 100644 index 0000000..7f8e830 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketLifecycleInput.html @@ -0,0 +1,345 @@ + + + + + + +Bucket.PutBucketLifecycleInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketLifecycleInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketLifecycleInput
    +extends RequestInputModel
    +
    PutBucketLifecycleInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Rule Bucket Lifecycle rule
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketLifecycleInput

        +
        public PutBucketLifecycleInput()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketLifecycleOutput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketLifecycleOutput.html new file mode 100644 index 0000000..548733f --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketLifecycleOutput.html @@ -0,0 +1,256 @@ + + + + + + +Bucket.PutBucketLifecycleOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketLifecycleOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketLifecycleOutput
    +extends OutputModel
    +
    PutBucketLifecycleOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Rule Bucket Lifecycle rule
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketLifecycleOutput

        +
        public PutBucketLifecycleOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketNotificationInput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketNotificationInput.html new file mode 100644 index 0000000..ed05f14 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketNotificationInput.html @@ -0,0 +1,345 @@ + + + + + + +Bucket.PutBucketNotificationInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketNotificationInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketNotificationInput
    +extends RequestInputModel
    +
    PutBucketNotificationInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Notifications Bucket Notification
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketNotificationInput

        +
        public PutBucketNotificationInput()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketNotificationOutput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketNotificationOutput.html new file mode 100644 index 0000000..505cef8 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketNotificationOutput.html @@ -0,0 +1,256 @@ + + + + + + +Bucket.PutBucketNotificationOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketNotificationOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketNotificationOutput
    +extends OutputModel
    +
    PutBucketNotificationOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Notifications Bucket Notification
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketNotificationOutput

        +
        public PutBucketNotificationOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketOutput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketOutput.html new file mode 100644 index 0000000..ee305a9 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketOutput.html @@ -0,0 +1,255 @@ + + + + + + +Bucket.PutBucketOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketOutput
    +extends OutputModel
    +
    PutBucketOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketOutput

        +
        public PutBucketOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketPolicyInput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketPolicyInput.html new file mode 100644 index 0000000..07ac2a4 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketPolicyInput.html @@ -0,0 +1,345 @@ + + + + + + +Bucket.PutBucketPolicyInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketPolicyInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketPolicyInput
    +extends RequestInputModel
    +
    PutBucketPolicyInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Statement Bucket policy statement
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketPolicyInput

        +
        public PutBucketPolicyInput()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutBucketPolicyOutput.html b/docs/com/qingstor/sdk/service/Bucket.PutBucketPolicyOutput.html new file mode 100644 index 0000000..40178cd --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutBucketPolicyOutput.html @@ -0,0 +1,256 @@ + + + + + + +Bucket.PutBucketPolicyOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutBucketPolicyOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutBucketPolicyOutput
    +extends OutputModel
    +
    PutBucketPolicyOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Statement Bucket policy statement
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutBucketPolicyOutput

        +
        public PutBucketPolicyOutput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutObjectInput.html b/docs/com/qingstor/sdk/service/Bucket.PutObjectInput.html new file mode 100644 index 0000000..9dedcb5 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutObjectInput.html @@ -0,0 +1,944 @@ + + + + + + +Bucket.PutObjectInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutObjectInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    直接已知子类:
    +
    UploadManager.PutObjectInput
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutObjectInput
    +extends RequestInputModel
    +
    PutObjectInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field CacheControl Object cache control
    + field ContentEncoding Object content encoding
    + field ContentLength Object content size
    + field ContentMD5 Object MD5sum
    + field ContentType Object content type
    + field Expect Used to indicate that particular server behaviors are required by the client +
    + field XQSCopySource Copy source, format (/'bucket-name'/object-key')
    + field XQSCopySourceEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSCopySourceEncryptionCustomerKey Encryption key of the object
    + field XQSCopySourceEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field XQSCopySourceIfMatch Check whether the copy source matches
    + field XQSCopySourceIfModifiedSince Check whether the copy source has been modified
    + field XQSCopySourceIfNoneMatch Check whether the copy source does not match
    + field XQSCopySourceIfUnmodifiedSince Check whether the copy source has not been modified
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field XQSFetchIfUnmodifiedSince Check whether fetch target object has not been modified
    + field XQSFetchSource Fetch source, should be a valid url
    + field XQSMoveSource Move source, format (/'bucket-name'/object-key')
    + field XQSStorageClass Specify the storage class for object
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutObjectInput

        +
        public PutObjectInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCacheControl

        +
        public void setCacheControl(java.lang.String cacheControl)
        +
      • +
      + + + +
        +
      • +

        getCacheControl

        +
        public java.lang.String getCacheControl()
        +
      • +
      + + + +
        +
      • +

        setContentEncoding

        +
        public void setContentEncoding(java.lang.String contentEncoding)
        +
      • +
      + + + +
        +
      • +

        getContentEncoding

        +
        public java.lang.String getContentEncoding()
        +
      • +
      + + + +
        +
      • +

        setContentLength

        +
        public void setContentLength(java.lang.Long contentLength)
        +
      • +
      + + + +
        +
      • +

        getContentLength

        +
        public java.lang.Long getContentLength()
        +
      • +
      + + + +
        +
      • +

        setContentMD5

        +
        public void setContentMD5(java.lang.String contentMD5)
        +
      • +
      + + + +
        +
      • +

        getContentMD5

        +
        public java.lang.String getContentMD5()
        +
      • +
      + + + +
        +
      • +

        setContentType

        +
        public void setContentType(java.lang.String contentType)
        +
      • +
      + + + +
        +
      • +

        getContentType

        +
        public java.lang.String getContentType()
        +
      • +
      + + + +
        +
      • +

        setExpect

        +
        public void setExpect(java.lang.String expect)
        +
      • +
      + + + +
        +
      • +

        getExpect

        +
        public java.lang.String getExpect()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySource

        +
        public void setXQSCopySource(java.lang.String xQSCopySource)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySource

        +
        public java.lang.String getXQSCopySource()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceEncryptionCustomerAlgorithm

        +
        public void setXQSCopySourceEncryptionCustomerAlgorithm(java.lang.String xQSCopySourceEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSCopySourceEncryptionCustomerAlgorithm()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceEncryptionCustomerKey

        +
        public void setXQSCopySourceEncryptionCustomerKey(java.lang.String xQSCopySourceEncryptionCustomerKey)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceEncryptionCustomerKey

        +
        public java.lang.String getXQSCopySourceEncryptionCustomerKey()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceEncryptionCustomerKeyMD5

        +
        public void setXQSCopySourceEncryptionCustomerKeyMD5(java.lang.String xQSCopySourceEncryptionCustomerKeyMD5)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceEncryptionCustomerKeyMD5

        +
        public java.lang.String getXQSCopySourceEncryptionCustomerKeyMD5()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceIfMatch

        +
        public void setXQSCopySourceIfMatch(java.lang.String xQSCopySourceIfMatch)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceIfMatch

        +
        public java.lang.String getXQSCopySourceIfMatch()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceIfModifiedSince

        +
        public void setXQSCopySourceIfModifiedSince(java.lang.String xQSCopySourceIfModifiedSince)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceIfModifiedSince

        +
        public java.lang.String getXQSCopySourceIfModifiedSince()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceIfNoneMatch

        +
        public void setXQSCopySourceIfNoneMatch(java.lang.String xQSCopySourceIfNoneMatch)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceIfNoneMatch

        +
        public java.lang.String getXQSCopySourceIfNoneMatch()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceIfUnmodifiedSince

        +
        public void setXQSCopySourceIfUnmodifiedSince(java.lang.String xQSCopySourceIfUnmodifiedSince)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceIfUnmodifiedSince

        +
        public java.lang.String getXQSCopySourceIfUnmodifiedSince()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKey

        +
        public void setXQSEncryptionCustomerKey(java.lang.String xQSEncryptionCustomerKey)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKey

        +
        public java.lang.String getXQSEncryptionCustomerKey()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKeyMD5

        +
        public void setXQSEncryptionCustomerKeyMD5(java.lang.String xQSEncryptionCustomerKeyMD5)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKeyMD5

        +
        public java.lang.String getXQSEncryptionCustomerKeyMD5()
        +
      • +
      + + + +
        +
      • +

        setXQSFetchIfUnmodifiedSince

        +
        public void setXQSFetchIfUnmodifiedSince(java.lang.String xQSFetchIfUnmodifiedSince)
        +
      • +
      + + + +
        +
      • +

        getXQSFetchIfUnmodifiedSince

        +
        public java.lang.String getXQSFetchIfUnmodifiedSince()
        +
      • +
      + + + +
        +
      • +

        setXQSFetchSource

        +
        public void setXQSFetchSource(java.lang.String xQSFetchSource)
        +
      • +
      + + + +
        +
      • +

        getXQSFetchSource

        +
        public java.lang.String getXQSFetchSource()
        +
      • +
      + + + +
        +
      • +

        setXQSMoveSource

        +
        public void setXQSMoveSource(java.lang.String xQSMoveSource)
        +
      • +
      + + + +
        +
      • +

        getXQSMoveSource

        +
        public java.lang.String getXQSMoveSource()
        +
      • +
      + + + +
        +
      • +

        setXQSStorageClass

        +
        public void setXQSStorageClass(java.lang.String xQSStorageClass)
        +
      • +
      + + + +
        +
      • +

        getXQSStorageClass

        +
        public java.lang.String getXQSStorageClass()
        +
      • +
      + + + +
        +
      • +

        getBodyInputFile

        +
        public java.io.File getBodyInputFile()
        +
        Get the File will be updated.
        +
        +
        返回:
        +
        the File object will be updated
        +
        +
      • +
      + + + +
        +
      • +

        setBodyInputFile

        +
        public void setBodyInputFile(java.io.File bodyInputFile)
        +
        Set the File to update.
        +
        +
        参数:
        +
        bodyInputFile - File to update
        +
        +
      • +
      + + + +
        +
      • +

        getBodyInputStream

        +
        public java.io.InputStream getBodyInputStream()
        +
        Get the body input stream.
        +
        +
        返回:
        +
        input stream
        +
        +
      • +
      + + + +
        +
      • +

        setBodyInputStream

        +
        public void setBodyInputStream(java.io.InputStream bodyInputStream)
        +
        Set the body input stream.
        +
        +
        参数:
        +
        bodyInputStream - input stream to update
        +
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.PutObjectOutput.html b/docs/com/qingstor/sdk/service/Bucket.PutObjectOutput.html new file mode 100644 index 0000000..ffa82d7 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.PutObjectOutput.html @@ -0,0 +1,350 @@ + + + + + + +Bucket.PutObjectOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.PutObjectOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.PutObjectOutput
    +extends OutputModel
    +
    PutObjectOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field CacheControl Object cache control
    + field ContentEncoding Object content encoding
    + field ContentLength Object content size
    + field ContentMD5 Object MD5sum
    + field ContentType Object content type
    + field Expect Used to indicate that particular server behaviors are required by the client +
    + field XQSCopySource Copy source, format (/'bucket-name'/object-key')
    + field XQSCopySourceEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSCopySourceEncryptionCustomerKey Encryption key of the object
    + field XQSCopySourceEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field XQSCopySourceIfMatch Check whether the copy source matches
    + field XQSCopySourceIfModifiedSince Check whether the copy source has been modified
    + field XQSCopySourceIfNoneMatch Check whether the copy source does not match
    + field XQSCopySourceIfUnmodifiedSince Check whether the copy source has not been modified
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field XQSFetchIfUnmodifiedSince Check whether fetch target object has not been modified
    + field XQSFetchSource Fetch source, should be a valid url
    + field XQSMoveSource Move source, format (/'bucket-name'/object-key')
    + field XQSStorageClass Specify the storage class for object
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutObjectOutput

        +
        public PutObjectOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setETag

        +
        public void setETag(java.lang.String eTag)
        +
      • +
      + + + +
        +
      • +

        getETag

        +
        public java.lang.String getETag()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.UploadMultipartInput.html b/docs/com/qingstor/sdk/service/Bucket.UploadMultipartInput.html new file mode 100644 index 0000000..a3f593d --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.UploadMultipartInput.html @@ -0,0 +1,889 @@ + + + + + + +Bucket.UploadMultipartInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.UploadMultipartInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.UploadMultipartInput
    +extends RequestInputModel
    +
    UploadMultipartInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field ContentLength Object multipart content length
    + field ContentMD5 Object multipart content MD5sum
    + field XQSCopyRange Specify range of the source object
    + field XQSCopySource Copy source, format (/'bucket-name'/object-key')
    + field XQSCopySourceEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSCopySourceEncryptionCustomerKey Encryption key of the object
    + field XQSCopySourceEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field XQSCopySourceIfMatch Check whether the Etag of copy source matches the specified value +
    + field XQSCopySourceIfModifiedSince Check whether the copy source has been modified since the + specified date
    + field XQSCopySourceIfNoneMatch Check whether the Etag of copy source does not matches the + specified value
    + field XQSCopySourceIfUnmodifiedSince Check whether the copy source has not been unmodified + since the specified date
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field PartNumber Object multipart upload part number
    + field UploadID Object multipart upload ID
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        UploadMultipartInput

        +
        public UploadMultipartInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setPartNumber

        +
        public void setPartNumber(java.lang.Integer partNumber)
        +
      • +
      + + + +
        +
      • +

        getPartNumber

        +
        public java.lang.Integer getPartNumber()
        +
      • +
      + + + +
        +
      • +

        setUploadID

        +
        public void setUploadID(java.lang.String uploadID)
        +
      • +
      + + + +
        +
      • +

        getUploadID

        +
        public java.lang.String getUploadID()
        +
      • +
      + + + +
        +
      • +

        setFileOffset

        +
        public void setFileOffset(java.lang.Long fileOffset)
        +
        You can set the offset of a file here.
        + Then use setContentLength() to get a part of a file.
        +
      • +
      + + + +
        +
      • +

        getFileOffset

        +
        public java.lang.Long getFileOffset()
        +
        Get the offset of the File or stream(default = -1).
        +
        +
        返回:
        +
        the offset of the File or stream
        +
        +
      • +
      + + + +
        +
      • +

        setBodyInputFilePart

        +
        public void setBodyInputFilePart(java.io.File bodyInputFilePart)
        +
        Set the File parts to update.
        +
        +
        参数:
        +
        bodyInputFilePart - File part to update
        +
        +
      • +
      + + + +
        +
      • +

        getBodyInputFilePart

        +
        public java.io.File getBodyInputFilePart()
        +
        Get the File will be updated.
        +
        +
        返回:
        +
        the File part will be updated
        +
        +
      • +
      + + + +
        +
      • +

        setContentLength

        +
        public void setContentLength(java.lang.Long contentLength)
        +
      • +
      + + + +
        +
      • +

        getContentLength

        +
        public java.lang.Long getContentLength()
        +
      • +
      + + + +
        +
      • +

        setContentMD5

        +
        public void setContentMD5(java.lang.String contentMD5)
        +
      • +
      + + + +
        +
      • +

        getContentMD5

        +
        public java.lang.String getContentMD5()
        +
      • +
      + + + +
        +
      • +

        setXQSCopyRange

        +
        public void setXQSCopyRange(java.lang.String xQSCopyRange)
        +
      • +
      + + + +
        +
      • +

        getXQSCopyRange

        +
        public java.lang.String getXQSCopyRange()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySource

        +
        public void setXQSCopySource(java.lang.String xQSCopySource)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySource

        +
        public java.lang.String getXQSCopySource()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceEncryptionCustomerAlgorithm

        +
        public void setXQSCopySourceEncryptionCustomerAlgorithm(java.lang.String xQSCopySourceEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSCopySourceEncryptionCustomerAlgorithm()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceEncryptionCustomerKey

        +
        public void setXQSCopySourceEncryptionCustomerKey(java.lang.String xQSCopySourceEncryptionCustomerKey)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceEncryptionCustomerKey

        +
        public java.lang.String getXQSCopySourceEncryptionCustomerKey()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceEncryptionCustomerKeyMD5

        +
        public void setXQSCopySourceEncryptionCustomerKeyMD5(java.lang.String xQSCopySourceEncryptionCustomerKeyMD5)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceEncryptionCustomerKeyMD5

        +
        public java.lang.String getXQSCopySourceEncryptionCustomerKeyMD5()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceIfMatch

        +
        public void setXQSCopySourceIfMatch(java.lang.String xQSCopySourceIfMatch)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceIfMatch

        +
        public java.lang.String getXQSCopySourceIfMatch()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceIfModifiedSince

        +
        public void setXQSCopySourceIfModifiedSince(java.lang.String xQSCopySourceIfModifiedSince)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceIfModifiedSince

        +
        public java.lang.String getXQSCopySourceIfModifiedSince()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceIfNoneMatch

        +
        public void setXQSCopySourceIfNoneMatch(java.lang.String xQSCopySourceIfNoneMatch)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceIfNoneMatch

        +
        public java.lang.String getXQSCopySourceIfNoneMatch()
        +
      • +
      + + + +
        +
      • +

        setXQSCopySourceIfUnmodifiedSince

        +
        public void setXQSCopySourceIfUnmodifiedSince(java.lang.String xQSCopySourceIfUnmodifiedSince)
        +
      • +
      + + + +
        +
      • +

        getXQSCopySourceIfUnmodifiedSince

        +
        public java.lang.String getXQSCopySourceIfUnmodifiedSince()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKey

        +
        public void setXQSEncryptionCustomerKey(java.lang.String xQSEncryptionCustomerKey)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKey

        +
        public java.lang.String getXQSEncryptionCustomerKey()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerKeyMD5

        +
        public void setXQSEncryptionCustomerKeyMD5(java.lang.String xQSEncryptionCustomerKeyMD5)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerKeyMD5

        +
        public java.lang.String getXQSEncryptionCustomerKeyMD5()
        +
      • +
      + + + +
        +
      • +

        getBodyInputFile

        +
        public java.io.File getBodyInputFile()
        +
        Get the File will be updated.
        +
        +
        返回:
        +
        the File object will be updated
        +
        +
      • +
      + + + +
        +
      • +

        setBodyInputFile

        +
        @Deprecated
        +public void setBodyInputFile(java.io.File bodyInputFile)
        +
        已过时。 
        +
        Set the File to update.
        + Deprecated, please use setBodyInputFilePart() to upload multi part.
        + Then setFileOffset() and setContentLength() to get a part of a file or stream.
        +
        +
        参数:
        +
        bodyInputFile - File to update
        +
        +
      • +
      + + + +
        +
      • +

        getBodyInputStream

        +
        public java.io.InputStream getBodyInputStream()
        +
        Get the body input stream.
        +
        +
        返回:
        +
        input stream
        +
        +
      • +
      + + + +
        +
      • +

        setBodyInputStream

        +
        public void setBodyInputStream(java.io.InputStream bodyInputStream)
        +
        Set the body input stream.
        +
        +
        参数:
        +
        bodyInputStream - input stream to update
        +
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.UploadMultipartOutput.html b/docs/com/qingstor/sdk/service/Bucket.UploadMultipartOutput.html new file mode 100644 index 0000000..7488d5e --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.UploadMultipartOutput.html @@ -0,0 +1,374 @@ + + + + + + +Bucket.UploadMultipartOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket.UploadMultipartOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    Bucket
    +
    +
    +
    +
    public static class Bucket.UploadMultipartOutput
    +extends OutputModel
    +
    UploadMultipartOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field ContentLength Object multipart content length
    + field ContentMD5 Object multipart content MD5sum
    + field XQSCopyRange Specify range of the source object
    + field XQSCopySource Copy source, format (/'bucket-name'/object-key')
    + field XQSCopySourceEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSCopySourceEncryptionCustomerKey Encryption key of the object
    + field XQSCopySourceEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field XQSCopySourceIfMatch Check whether the Etag of copy source matches the specified value +
    + field XQSCopySourceIfModifiedSince Check whether the copy source has been modified since the + specified date
    + field XQSCopySourceIfNoneMatch Check whether the Etag of copy source does not matches the + specified value
    + field XQSCopySourceIfUnmodifiedSince Check whether the copy source has not been unmodified + since the specified date
    + field XQSEncryptionCustomerAlgorithm Encryption algorithm of the object
    + field XQSEncryptionCustomerKey Encryption key of the object
    + field XQSEncryptionCustomerKeyMD5 MD5sum of encryption key
    + field PartNumber Object multipart upload part number
    + field UploadID Object multipart upload ID
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        UploadMultipartOutput

        +
        public UploadMultipartOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setETag

        +
        public void setETag(java.lang.String eTag)
        +
      • +
      + + + +
        +
      • +

        getETag

        +
        public java.lang.String getETag()
        +
      • +
      + + + +
        +
      • +

        setXQSContentCopyRange

        +
        public void setXQSContentCopyRange(java.lang.String xQSContentCopyRange)
        +
      • +
      + + + +
        +
      • +

        getXQSContentCopyRange

        +
        public java.lang.String getXQSContentCopyRange()
        +
      • +
      + + + +
        +
      • +

        setXQSEncryptionCustomerAlgorithm

        +
        public void setXQSEncryptionCustomerAlgorithm(java.lang.String xQSEncryptionCustomerAlgorithm)
        +
      • +
      + + + +
        +
      • +

        getXQSEncryptionCustomerAlgorithm

        +
        public java.lang.String getXQSEncryptionCustomerAlgorithm()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Bucket.html b/docs/com/qingstor/sdk/service/Bucket.html new file mode 100644 index 0000000..5d92263 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Bucket.html @@ -0,0 +1,4206 @@ + + + + + + +Bucket (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Bucket

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.service.Bucket
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class Bucket
    +extends java.lang.Object
    +implements java.io.Serializable
    +
    Most of operations in qingstore can be found in this class.
    + Usage: + +
    + EnvContext env = new EnvContext("ACCESS_KEY_ID_EXAMPLE", "SECRET_ACCESS_KEY_EXAMPLE");
    + String zoneName = "pek3a";
    + String bucketName = "testBucketName";
    + Bucket bucket = new Bucket(env, zoneKey, bucketName);
    + 
    + + Now you can use the object bucket to do the operations.
    +
    +
    另请参阅:
    +
    序列化表格
    +
    +
  • +
+
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/QingStor.ListBucketsInput.html b/docs/com/qingstor/sdk/service/QingStor.ListBucketsInput.html new file mode 100644 index 0000000..0273245 --- /dev/null +++ b/docs/com/qingstor/sdk/service/QingStor.ListBucketsInput.html @@ -0,0 +1,319 @@ + + + + + + +QingStor.ListBucketsInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 QingStor.ListBucketsInput

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    ParamValidate
    +
    +
    +
    封闭类:
    +
    QingStor
    +
    +
    +
    +
    public static class QingStor.ListBucketsInput
    +extends RequestInputModel
    +
    ListBucketsInput: an input stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Location Limits results to buckets that in the location
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetLocation() 
      voidsetLocation(java.lang.String location) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ListBucketsInput

        +
        public ListBucketsInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setLocation

        +
        public void setLocation(java.lang.String location)
        +
      • +
      + + + +
        +
      • +

        getLocation

        +
        public java.lang.String getLocation()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/QingStor.ListBucketsOutput.html b/docs/com/qingstor/sdk/service/QingStor.ListBucketsOutput.html new file mode 100644 index 0000000..dae812b --- /dev/null +++ b/docs/com/qingstor/sdk/service/QingStor.ListBucketsOutput.html @@ -0,0 +1,329 @@ + + + + + + +QingStor.ListBucketsOutput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 QingStor.ListBucketsOutput

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    QingStor
    +
    +
    +
    +
    public static class QingStor.ListBucketsOutput
    +extends OutputModel
    +
    ListBucketsOutput: an output stream of the bucket.
    + The following is the desc of fields.
    + These fields are headers or bodies of the http request.
    + field Location Limits results to buckets that in the location
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ListBucketsOutput

        +
        public ListBucketsOutput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setBuckets

        +
        public void setBuckets(java.util.List<Types.BucketModel> buckets)
        +
      • +
      + + + + + + + +
        +
      • +

        setCount

        +
        public void setCount(java.lang.Integer count)
        +
      • +
      + + + +
        +
      • +

        getCount

        +
        public java.lang.Integer getCount()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/QingStor.html b/docs/com/qingstor/sdk/service/QingStor.html new file mode 100644 index 0000000..24668ba --- /dev/null +++ b/docs/com/qingstor/sdk/service/QingStor.html @@ -0,0 +1,411 @@ + + + + + + +QingStor (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 QingStor

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.service.QingStor
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QingStor
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.ACLModel.html b/docs/com/qingstor/sdk/service/Types.ACLModel.html new file mode 100644 index 0000000..2d91fdb --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.ACLModel.html @@ -0,0 +1,341 @@ + + + + + + +Types.ACLModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.ACLModel

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.AbortIncompleteMultipartUploadModel.html b/docs/com/qingstor/sdk/service/Types.AbortIncompleteMultipartUploadModel.html new file mode 100644 index 0000000..a4d7894 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.AbortIncompleteMultipartUploadModel.html @@ -0,0 +1,315 @@ + + + + + + +Types.AbortIncompleteMultipartUploadModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.AbortIncompleteMultipartUploadModel

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        AbortIncompleteMultipartUploadModel

        +
        public AbortIncompleteMultipartUploadModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setDaysAfterInitiation

        +
        public void setDaysAfterInitiation(java.lang.Integer daysAfterInitiation)
        +
      • +
      + + + +
        +
      • +

        getDaysAfterInitiation

        +
        public java.lang.Integer getDaysAfterInitiation()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.BucketModel.html b/docs/com/qingstor/sdk/service/Types.BucketModel.html new file mode 100644 index 0000000..eac0648 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.BucketModel.html @@ -0,0 +1,393 @@ + + + + + + +Types.BucketModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.BucketModel

+
+
+ +
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      BucketModel() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetCreated() 
      java.lang.StringgetLocation() 
      java.lang.StringgetName() 
      java.lang.StringgetURL() 
      voidsetCreated(java.lang.String created) 
      voidsetLocation(java.lang.String location) 
      voidsetName(java.lang.String name) 
      voidsetURL(java.lang.String uRL) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        BucketModel

        +
        public BucketModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCreated

        +
        public void setCreated(java.lang.String created)
        +
      • +
      + + + +
        +
      • +

        getCreated

        +
        public java.lang.String getCreated()
        +
      • +
      + + + +
        +
      • +

        setLocation

        +
        public void setLocation(java.lang.String location)
        +
      • +
      + + + +
        +
      • +

        getLocation

        +
        public java.lang.String getLocation()
        +
      • +
      + + + +
        +
      • +

        setName

        +
        public void setName(java.lang.String name)
        +
      • +
      + + + +
        +
      • +

        getName

        +
        public java.lang.String getName()
        +
      • +
      + + + +
        +
      • +

        setURL

        +
        public void setURL(java.lang.String uRL)
        +
      • +
      + + + +
        +
      • +

        getURL

        +
        public java.lang.String getURL()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.CORSRuleModel.html b/docs/com/qingstor/sdk/service/Types.CORSRuleModel.html new file mode 100644 index 0000000..b8e4e63 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.CORSRuleModel.html @@ -0,0 +1,419 @@ + + + + + + +Types.CORSRuleModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.CORSRuleModel

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CORSRuleModel

        +
        public CORSRuleModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setAllowedHeaders

        +
        public void setAllowedHeaders(java.util.List<java.lang.String> allowedHeaders)
        +
      • +
      + + + +
        +
      • +

        getAllowedHeaders

        +
        public java.util.List<java.lang.String> getAllowedHeaders()
        +
      • +
      + + + +
        +
      • +

        setAllowedMethods

        +
        public void setAllowedMethods(java.util.List<java.lang.String> allowedMethods)
        +
      • +
      + + + +
        +
      • +

        getAllowedMethods

        +
        public java.util.List<java.lang.String> getAllowedMethods()
        +
      • +
      + + + +
        +
      • +

        setAllowedOrigin

        +
        public void setAllowedOrigin(java.lang.String allowedOrigin)
        +
      • +
      + + + +
        +
      • +

        getAllowedOrigin

        +
        public java.lang.String getAllowedOrigin()
        +
      • +
      + + + +
        +
      • +

        setExposeHeaders

        +
        public void setExposeHeaders(java.util.List<java.lang.String> exposeHeaders)
        +
      • +
      + + + +
        +
      • +

        getExposeHeaders

        +
        public java.util.List<java.lang.String> getExposeHeaders()
        +
      • +
      + + + +
        +
      • +

        setMaxAgeSeconds

        +
        public void setMaxAgeSeconds(java.lang.Integer maxAgeSeconds)
        +
      • +
      + + + +
        +
      • +

        getMaxAgeSeconds

        +
        public java.lang.Integer getMaxAgeSeconds()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.CloudfuncArgsModel.html b/docs/com/qingstor/sdk/service/Types.CloudfuncArgsModel.html new file mode 100644 index 0000000..f4b3c01 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.CloudfuncArgsModel.html @@ -0,0 +1,393 @@ + + + + + + +Types.CloudfuncArgsModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.CloudfuncArgsModel

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CloudfuncArgsModel

        +
        public CloudfuncArgsModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setAction

        +
        public void setAction(java.lang.String action)
        +
      • +
      + + + +
        +
      • +

        getAction

        +
        public java.lang.String getAction()
        +
      • +
      + + + +
        +
      • +

        setKeyPrefix

        +
        public void setKeyPrefix(java.lang.String keyPrefix)
        +
      • +
      + + + +
        +
      • +

        getKeyPrefix

        +
        public java.lang.String getKeyPrefix()
        +
      • +
      + + + +
        +
      • +

        setKeySeprate

        +
        public void setKeySeprate(java.lang.String keySeprate)
        +
      • +
      + + + +
        +
      • +

        getKeySeprate

        +
        public java.lang.String getKeySeprate()
        +
      • +
      + + + +
        +
      • +

        setSaveBucket

        +
        public void setSaveBucket(java.lang.String saveBucket)
        +
      • +
      + + + +
        +
      • +

        getSaveBucket

        +
        public java.lang.String getSaveBucket()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.ConditionModel.html b/docs/com/qingstor/sdk/service/Types.ConditionModel.html new file mode 100644 index 0000000..53ed9c8 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.ConditionModel.html @@ -0,0 +1,419 @@ + + + + + + +Types.ConditionModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.ConditionModel

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.ExpirationModel.html b/docs/com/qingstor/sdk/service/Types.ExpirationModel.html new file mode 100644 index 0000000..4fdb8c0 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.ExpirationModel.html @@ -0,0 +1,315 @@ + + + + + + +Types.ExpirationModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.ExpirationModel

+
+
+ +
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.IntegergetDays() 
      voidsetDays(java.lang.Integer days) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ExpirationModel

        +
        public ExpirationModel()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.FilterModel.html b/docs/com/qingstor/sdk/service/Types.FilterModel.html new file mode 100644 index 0000000..0a3335f --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.FilterModel.html @@ -0,0 +1,315 @@ + + + + + + +Types.FilterModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.FilterModel

+
+
+ +
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      FilterModel() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetPrefix() 
      voidsetPrefix(java.lang.String prefix) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        FilterModel

        +
        public FilterModel()
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.GranteeModel.html b/docs/com/qingstor/sdk/service/Types.GranteeModel.html new file mode 100644 index 0000000..64b2e04 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.GranteeModel.html @@ -0,0 +1,367 @@ + + + + + + +Types.GranteeModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.GranteeModel

+
+
+ +
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      GranteeModel() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetID() 
      java.lang.StringgetName() 
      java.lang.StringgetType() 
      voidsetID(java.lang.String iD) 
      voidsetName(java.lang.String name) 
      voidsetType(java.lang.String type) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GranteeModel

        +
        public GranteeModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setID

        +
        public void setID(java.lang.String iD)
        +
      • +
      + + + +
        +
      • +

        getID

        +
        public java.lang.String getID()
        +
      • +
      + + + +
        +
      • +

        setName

        +
        public void setName(java.lang.String name)
        +
      • +
      + + + +
        +
      • +

        getName

        +
        public java.lang.String getName()
        +
      • +
      + + + +
        +
      • +

        setType

        +
        public void setType(java.lang.String type)
        +
      • +
      + + + +
        +
      • +

        getType

        +
        public java.lang.String getType()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.IPAddressModel.html b/docs/com/qingstor/sdk/service/Types.IPAddressModel.html new file mode 100644 index 0000000..3001149 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.IPAddressModel.html @@ -0,0 +1,315 @@ + + + + + + +Types.IPAddressModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.IPAddressModel

+
+
+ +
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      IPAddressModel() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.util.List<java.lang.String>getSourceIP() 
      voidsetSourceIP(java.util.List<java.lang.String> sourceIP) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        IPAddressModel

        +
        public IPAddressModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setSourceIP

        +
        public void setSourceIP(java.util.List<java.lang.String> sourceIP)
        +
      • +
      + + + +
        +
      • +

        getSourceIP

        +
        public java.util.List<java.lang.String> getSourceIP()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.IsNullModel.html b/docs/com/qingstor/sdk/service/Types.IsNullModel.html new file mode 100644 index 0000000..97322a8 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.IsNullModel.html @@ -0,0 +1,315 @@ + + + + + + +Types.IsNullModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.IsNullModel

+
+
+ +
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      IsNullModel() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.BooleangetReferer() 
      voidsetReferer(java.lang.Boolean referer) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        IsNullModel

        +
        public IsNullModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setReferer

        +
        public void setReferer(java.lang.Boolean referer)
        +
      • +
      + + + +
        +
      • +

        getReferer

        +
        public java.lang.Boolean getReferer()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.KeyDeleteErrorModel.html b/docs/com/qingstor/sdk/service/Types.KeyDeleteErrorModel.html new file mode 100644 index 0000000..4a3ba2d --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.KeyDeleteErrorModel.html @@ -0,0 +1,367 @@ + + + + + + +Types.KeyDeleteErrorModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.KeyDeleteErrorModel

+
+
+ +
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetCode() 
      java.lang.StringgetKey() 
      java.lang.StringgetMessage() 
      voidsetCode(java.lang.String code) 
      voidsetKey(java.lang.String key) 
      voidsetMessage(java.lang.String message) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        KeyDeleteErrorModel

        +
        public KeyDeleteErrorModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCode

        +
        public void setCode(java.lang.String code)
        +
      • +
      + + + +
        +
      • +

        getCode

        +
        public java.lang.String getCode()
        +
      • +
      + + + +
        +
      • +

        setKey

        +
        public void setKey(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getKey

        +
        public java.lang.String getKey()
        +
      • +
      + + + +
        +
      • +

        setMessage

        +
        public void setMessage(java.lang.String message)
        +
      • +
      + + + +
        +
      • +

        getMessage

        +
        public java.lang.String getMessage()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.KeyModel.html b/docs/com/qingstor/sdk/service/Types.KeyModel.html new file mode 100644 index 0000000..2130384 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.KeyModel.html @@ -0,0 +1,471 @@ + + + + + + +Types.KeyModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.KeyModel

+
+
+ +
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      KeyModel() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetCreated() 
      java.lang.BooleangetEncrypted() 
      java.lang.StringgetEtag() 
      java.lang.StringgetKey() 
      java.lang.StringgetMimeType() 
      java.lang.IntegergetModified() 
      java.lang.LonggetSize() 
      voidsetCreated(java.lang.String created) 
      voidsetEncrypted(java.lang.Boolean encrypted) 
      voidsetEtag(java.lang.String etag) 
      voidsetKey(java.lang.String key) 
      voidsetMimeType(java.lang.String mimeType) 
      voidsetModified(java.lang.Integer modified) 
      voidsetSize(java.lang.Long size) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        KeyModel

        +
        public KeyModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCreated

        +
        public void setCreated(java.lang.String created)
        +
      • +
      + + + +
        +
      • +

        getCreated

        +
        public java.lang.String getCreated()
        +
      • +
      + + + +
        +
      • +

        setEncrypted

        +
        public void setEncrypted(java.lang.Boolean encrypted)
        +
      • +
      + + + +
        +
      • +

        getEncrypted

        +
        public java.lang.Boolean getEncrypted()
        +
      • +
      + + + +
        +
      • +

        setEtag

        +
        public void setEtag(java.lang.String etag)
        +
      • +
      + + + +
        +
      • +

        getEtag

        +
        public java.lang.String getEtag()
        +
      • +
      + + + +
        +
      • +

        setKey

        +
        public void setKey(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getKey

        +
        public java.lang.String getKey()
        +
      • +
      + + + +
        +
      • +

        setMimeType

        +
        public void setMimeType(java.lang.String mimeType)
        +
      • +
      + + + +
        +
      • +

        getMimeType

        +
        public java.lang.String getMimeType()
        +
      • +
      + + + +
        +
      • +

        setModified

        +
        public void setModified(java.lang.Integer modified)
        +
      • +
      + + + +
        +
      • +

        getModified

        +
        public java.lang.Integer getModified()
        +
      • +
      + + + +
        +
      • +

        setSize

        +
        public void setSize(java.lang.Long size)
        +
      • +
      + + + +
        +
      • +

        getSize

        +
        public java.lang.Long getSize()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.NotIPAddressModel.html b/docs/com/qingstor/sdk/service/Types.NotIPAddressModel.html new file mode 100644 index 0000000..c079ab7 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.NotIPAddressModel.html @@ -0,0 +1,315 @@ + + + + + + +Types.NotIPAddressModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.NotIPAddressModel

+
+
+ +
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.util.List<java.lang.String>getSourceIP() 
      voidsetSourceIP(java.util.List<java.lang.String> sourceIP) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        NotIPAddressModel

        +
        public NotIPAddressModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setSourceIP

        +
        public void setSourceIP(java.util.List<java.lang.String> sourceIP)
        +
      • +
      + + + +
        +
      • +

        getSourceIP

        +
        public java.util.List<java.lang.String> getSourceIP()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.NotificationModel.html b/docs/com/qingstor/sdk/service/Types.NotificationModel.html new file mode 100644 index 0000000..7a5bc8f --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.NotificationModel.html @@ -0,0 +1,445 @@ + + + + + + +Types.NotificationModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.NotificationModel

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        NotificationModel

        +
        public NotificationModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCloudfunc

        +
        public void setCloudfunc(java.lang.String cloudfunc)
        +
      • +
      + + + +
        +
      • +

        getCloudfunc

        +
        public java.lang.String getCloudfunc()
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        setEventTypes

        +
        public void setEventTypes(java.util.List<java.lang.String> eventTypes)
        +
      • +
      + + + +
        +
      • +

        getEventTypes

        +
        public java.util.List<java.lang.String> getEventTypes()
        +
      • +
      + + + +
        +
      • +

        setID

        +
        public void setID(java.lang.String iD)
        +
      • +
      + + + +
        +
      • +

        getID

        +
        public java.lang.String getID()
        +
      • +
      + + + +
        +
      • +

        setNotifyURL

        +
        public void setNotifyURL(java.lang.String notifyURL)
        +
      • +
      + + + +
        +
      • +

        getNotifyURL

        +
        public java.lang.String getNotifyURL()
        +
      • +
      + + + +
        +
      • +

        setObjectFilters

        +
        public void setObjectFilters(java.util.List<java.lang.String> objectFilters)
        +
      • +
      + + + +
        +
      • +

        getObjectFilters

        +
        public java.util.List<java.lang.String> getObjectFilters()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.ObjectPartModel.html b/docs/com/qingstor/sdk/service/Types.ObjectPartModel.html new file mode 100644 index 0000000..c816704 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.ObjectPartModel.html @@ -0,0 +1,393 @@ + + + + + + +Types.ObjectPartModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.ObjectPartModel

+
+
+ +
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetCreated() 
      java.lang.StringgetEtag() 
      java.lang.IntegergetPartNumber() 
      java.lang.LonggetSize() 
      voidsetCreated(java.lang.String created) 
      voidsetEtag(java.lang.String etag) 
      voidsetPartNumber(java.lang.Integer partNumber) 
      voidsetSize(java.lang.Long size) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ObjectPartModel

        +
        public ObjectPartModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCreated

        +
        public void setCreated(java.lang.String created)
        +
      • +
      + + + +
        +
      • +

        getCreated

        +
        public java.lang.String getCreated()
        +
      • +
      + + + +
        +
      • +

        setEtag

        +
        public void setEtag(java.lang.String etag)
        +
      • +
      + + + +
        +
      • +

        getEtag

        +
        public java.lang.String getEtag()
        +
      • +
      + + + +
        +
      • +

        setPartNumber

        +
        public void setPartNumber(java.lang.Integer partNumber)
        +
      • +
      + + + +
        +
      • +

        getPartNumber

        +
        public java.lang.Integer getPartNumber()
        +
      • +
      + + + +
        +
      • +

        setSize

        +
        public void setSize(java.lang.Long size)
        +
      • +
      + + + +
        +
      • +

        getSize

        +
        public java.lang.Long getSize()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.OwnerModel.html b/docs/com/qingstor/sdk/service/Types.OwnerModel.html new file mode 100644 index 0000000..d3d38dc --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.OwnerModel.html @@ -0,0 +1,341 @@ + + + + + + +Types.OwnerModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.OwnerModel

+
+
+ +
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      OwnerModel() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetID() 
      java.lang.StringgetName() 
      voidsetID(java.lang.String iD) 
      voidsetName(java.lang.String name) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        OwnerModel

        +
        public OwnerModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setID

        +
        public void setID(java.lang.String iD)
        +
      • +
      + + + +
        +
      • +

        getID

        +
        public java.lang.String getID()
        +
      • +
      + + + +
        +
      • +

        setName

        +
        public void setName(java.lang.String name)
        +
      • +
      + + + +
        +
      • +

        getName

        +
        public java.lang.String getName()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.RuleModel.html b/docs/com/qingstor/sdk/service/Types.RuleModel.html new file mode 100644 index 0000000..796fa38 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.RuleModel.html @@ -0,0 +1,445 @@ + + + + + + +Types.RuleModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.RuleModel

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.StatementModel.html b/docs/com/qingstor/sdk/service/Types.StatementModel.html new file mode 100644 index 0000000..2644897 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.StatementModel.html @@ -0,0 +1,445 @@ + + + + + + +Types.StatementModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.StatementModel

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        StatementModel

        +
        public StatementModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setAction

        +
        public void setAction(java.util.List<java.lang.String> action)
        +
      • +
      + + + +
        +
      • +

        getAction

        +
        public java.util.List<java.lang.String> getAction()
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        setEffect

        +
        public void setEffect(java.lang.String effect)
        +
      • +
      + + + +
        +
      • +

        getEffect

        +
        public java.lang.String getEffect()
        +
      • +
      + + + +
        +
      • +

        setID

        +
        public void setID(java.lang.String iD)
        +
      • +
      + + + +
        +
      • +

        getID

        +
        public java.lang.String getID()
        +
      • +
      + + + +
        +
      • +

        setResource

        +
        public void setResource(java.util.List<java.lang.String> resource)
        +
      • +
      + + + +
        +
      • +

        getResource

        +
        public java.util.List<java.lang.String> getResource()
        +
      • +
      + + + +
        +
      • +

        setUser

        +
        public void setUser(java.util.List<java.lang.String> user)
        +
      • +
      + + + +
        +
      • +

        getUser

        +
        public java.util.List<java.lang.String> getUser()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.StringLikeModel.html b/docs/com/qingstor/sdk/service/Types.StringLikeModel.html new file mode 100644 index 0000000..c93bf6d --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.StringLikeModel.html @@ -0,0 +1,315 @@ + + + + + + +Types.StringLikeModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.StringLikeModel

+
+
+ +
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.util.List<java.lang.String>getReferer() 
      voidsetReferer(java.util.List<java.lang.String> referer) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        StringLikeModel

        +
        public StringLikeModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setReferer

        +
        public void setReferer(java.util.List<java.lang.String> referer)
        +
      • +
      + + + +
        +
      • +

        getReferer

        +
        public java.util.List<java.lang.String> getReferer()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.StringNotLikeModel.html b/docs/com/qingstor/sdk/service/Types.StringNotLikeModel.html new file mode 100644 index 0000000..de066d2 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.StringNotLikeModel.html @@ -0,0 +1,315 @@ + + + + + + +Types.StringNotLikeModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.StringNotLikeModel

+
+
+ +
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.util.List<java.lang.String>getReferer() 
      voidsetReferer(java.util.List<java.lang.String> referer) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        StringNotLikeModel

        +
        public StringNotLikeModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setReferer

        +
        public void setReferer(java.util.List<java.lang.String> referer)
        +
      • +
      + + + +
        +
      • +

        getReferer

        +
        public java.util.List<java.lang.String> getReferer()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.TransitionModel.html b/docs/com/qingstor/sdk/service/Types.TransitionModel.html new file mode 100644 index 0000000..067fa40 --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.TransitionModel.html @@ -0,0 +1,341 @@ + + + + + + +Types.TransitionModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.TransitionModel

+
+
+ +
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.IntegergetDays() 
      java.lang.IntegergetStorageClass() 
      voidsetDays(java.lang.Integer days) 
      voidsetStorageClass(java.lang.Integer storageClass) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        TransitionModel

        +
        public TransitionModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setDays

        +
        public void setDays(java.lang.Integer days)
        +
      • +
      + + + +
        +
      • +

        getDays

        +
        public java.lang.Integer getDays()
        +
      • +
      + + + +
        +
      • +

        setStorageClass

        +
        public void setStorageClass(java.lang.Integer storageClass)
        +
      • +
      + + + +
        +
      • +

        getStorageClass

        +
        public java.lang.Integer getStorageClass()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.UploadsModel.html b/docs/com/qingstor/sdk/service/Types.UploadsModel.html new file mode 100644 index 0000000..d15838e --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.UploadsModel.html @@ -0,0 +1,367 @@ + + + + + + +Types.UploadsModel (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types.UploadsModel

+
+
+ +
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      UploadsModel() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      java.lang.StringgetCreated() 
      java.lang.StringgetKey() 
      java.lang.StringgetUploadID() 
      voidsetCreated(java.lang.String created) 
      voidsetKey(java.lang.String key) 
      voidsetUploadID(java.lang.String uploadID) 
      java.lang.StringvalidateParam() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        UploadsModel

        +
        public UploadsModel()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setCreated

        +
        public void setCreated(java.lang.String created)
        +
      • +
      + + + +
        +
      • +

        getCreated

        +
        public java.lang.String getCreated()
        +
      • +
      + + + +
        +
      • +

        setKey

        +
        public void setKey(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getKey

        +
        public java.lang.String getKey()
        +
      • +
      + + + +
        +
      • +

        setUploadID

        +
        public void setUploadID(java.lang.String uploadID)
        +
      • +
      + + + +
        +
      • +

        getUploadID

        +
        public java.lang.String getUploadID()
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/Types.html b/docs/com/qingstor/sdk/service/Types.html new file mode 100644 index 0000000..c38c7dc --- /dev/null +++ b/docs/com/qingstor/sdk/service/Types.html @@ -0,0 +1,343 @@ + + + + + + +Types (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.service
+

类 Types

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.service.Types
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class Types
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        Types

        +
        public Types()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/service/package-frame.html b/docs/com/qingstor/sdk/service/package-frame.html new file mode 100644 index 0000000..0c0c6e4 --- /dev/null +++ b/docs/com/qingstor/sdk/service/package-frame.html @@ -0,0 +1,102 @@ + + + + + + +com.qingstor.sdk.service (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.service

+
+

+ +
+ + diff --git a/docs/com/qingstor/sdk/service/package-summary.html b/docs/com/qingstor/sdk/service/package-summary.html new file mode 100644 index 0000000..039d16e --- /dev/null +++ b/docs/com/qingstor/sdk/service/package-summary.html @@ -0,0 +1,579 @@ + + + + + + +com.qingstor.sdk.service (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.service

+
+
+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/service/package-tree.html b/docs/com/qingstor/sdk/service/package-tree.html new file mode 100644 index 0000000..ce84999 --- /dev/null +++ b/docs/com/qingstor/sdk/service/package-tree.html @@ -0,0 +1,225 @@ + + + + + + +com.qingstor.sdk.service 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.service的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/upload/Recorder.html b/docs/com/qingstor/sdk/upload/Recorder.html new file mode 100644 index 0000000..542697c --- /dev/null +++ b/docs/com/qingstor/sdk/upload/Recorder.html @@ -0,0 +1,278 @@ + + + + + + +Recorder (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.upload
+

接口 Recorder

+
+
+
+
    +
  • +
    +
    所有已知实现类:
    +
    DBBeanRecorder, FileRecorder
    +
    +
    +
    +
    public interface Recorder
    +
    A interface defined to make records when multi uploads.
    + Created by chengww on 2018/1/23.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 抽象方法 
      限定符和类型方法和说明
      voiddel(java.lang.String key) +
      Delete the info of progress of multi uploads.
      +
      byte[]get(java.lang.String key) +
      Get the info of progress of multi uploads.
      +
      voidset(java.lang.String key, + byte[] data) +
      Set a new or updated progress of multi uploads.
      +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        set

        +
        void set(java.lang.String key,
        +         byte[] data)
        +
        Set a new or updated progress of multi uploads.
        +
        +
        参数:
        +
        key - key recorded in the upload.
        +
        data - data recorded in the upload.
        +
        +
      • +
      + + + +
        +
      • +

        get

        +
        byte[] get(java.lang.String key)
        +
        Get the info of progress of multi uploads.
        +
        +
        参数:
        +
        key - key recorded in the upload.
        +
        返回:
        +
        info of progress.
        +
        +
      • +
      + + + +
        +
      • +

        del

        +
        void del(java.lang.String key)
        +
        Delete the info of progress of multi uploads.
        +
        +
        参数:
        +
        key - key recorded in the upload.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/upload/UploadManager.CompleteMultipartUploadInput.html b/docs/com/qingstor/sdk/upload/UploadManager.CompleteMultipartUploadInput.html new file mode 100644 index 0000000..c7c08bb --- /dev/null +++ b/docs/com/qingstor/sdk/upload/UploadManager.CompleteMultipartUploadInput.html @@ -0,0 +1,338 @@ + + + + + + +UploadManager.CompleteMultipartUploadInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.upload
+

类 UploadManager.CompleteMultipartUploadInput

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CompleteMultipartUploadInput

        +
        public CompleteMultipartUploadInput(java.lang.String multipart_upload_id,
        +                                    int partsCount,
        +                                    int startIndex)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getContentLength

        +
        public java.lang.Long getContentLength()
        +
      • +
      + + + +
        +
      • +

        setContentLength

        +
        public void setContentLength(java.lang.Long contentLength)
        +
      • +
      + + + +
        +
      • +

        setContentDisposition

        +
        public void setContentDisposition(java.lang.String contentDisposition)
        +
      • +
      + + + +
        +
      • +

        getContentDisposition

        +
        public java.lang.String getContentDisposition()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/upload/UploadManager.PutObjectInput.html b/docs/com/qingstor/sdk/upload/UploadManager.PutObjectInput.html new file mode 100644 index 0000000..ba2c179 --- /dev/null +++ b/docs/com/qingstor/sdk/upload/UploadManager.PutObjectInput.html @@ -0,0 +1,308 @@ + + + + + + +UploadManager.PutObjectInput (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.upload
+

类 UploadManager.PutObjectInput

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PutObjectInput

        +
        public PutObjectInput()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setContentDisposition

        +
        public void setContentDisposition(java.lang.String contentDisposition)
        +
      • +
      + + + +
        +
      • +

        getContentDisposition

        +
        public java.lang.String getContentDisposition()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/upload/UploadManager.html b/docs/com/qingstor/sdk/upload/UploadManager.html new file mode 100644 index 0000000..a3101d7 --- /dev/null +++ b/docs/com/qingstor/sdk/upload/UploadManager.html @@ -0,0 +1,583 @@ + + + + + + +UploadManager (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.upload
+

类 UploadManager

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.upload.UploadManager
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class UploadManager
    +extends java.lang.Object
    +
    A manager of uploading.
    + Created by chengww on 2018/1/23.
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        put

        +
        public void put(java.io.File file)
        +         throws QSException
        +
        Upload a file with a sync request.
        +
        +
        参数:
        +
        file - file
        +
        抛出:
        +
        QSException - exception
        +
        +
      • +
      + + + +
        +
      • +

        put

        +
        public void put(java.io.File file,
        +                java.lang.String objectKey,
        +                java.lang.String fileName,
        +                java.lang.String eTag)
        +         throws QSException
        +
        Upload a file with a sync request.
        +
        +
        参数:
        +
        file - file
        +
        objectKey - key of the object in the bucket
        +
        fileName - file name of response(content-disposition) when downloaded
        +
        eTag - MD5 info
        +
        抛出:
        +
        QSException - exception
        +
        +
      • +
      + + + +
        +
      • +

        putFileMulti

        +
        public void putFileMulti(java.io.File file,
        +                         java.lang.String objectKey,
        +                         java.lang.String fileName,
        +                         java.lang.String eTag,
        +                         long length)
        +                  throws QSException
        +
        Upload a file with a multi upload as a sync request.
        +
        +
        参数:
        +
        file - file
        +
        objectKey - key of the object in the bucket
        +
        fileName - file name of response(content-disposition) when downloaded
        +
        eTag - MD5 info
        +
        length - length of the file.
        +
        抛出:
        +
        QSException - exception
        +
        +
      • +
      + + + +
        +
      • +

        putFile

        +
        public void putFile(java.io.File file,
        +                    java.lang.String objectKey,
        +                    java.lang.String fileName,
        +                    long length)
        +             throws QSException
        +
        Upload a file with a simple put object upload as a sync request.
        + If a file's size is less than partSize, there will call this method.
        +
        +
        参数:
        +
        file - file
        +
        objectKey - key of the object in the bucket
        +
        fileName - file name of response(content-disposition) when downloaded
        +
        length - length of the file
        +
        抛出:
        +
        QSException - exception
        +
        +
      • +
      + + + +
        +
      • +

        getPartSize

        +
        public long getPartSize()
        +
      • +
      + + + +
        +
      • +

        setPartSize

        +
        public void setPartSize(long partSize)
        +
      • +
      + + + +
        +
      • +

        getRecorder

        +
        public Recorder getRecorder()
        +
      • +
      + + + +
        +
      • +

        setRecorder

        +
        public void setRecorder(Recorder recorder)
        +
      • +
      + + + +
        +
      • +

        getBucket

        +
        public Bucket getBucket()
        +
      • +
      + + + +
        +
      • +

        setBucket

        +
        public void setBucket(Bucket bucket)
        +
      • +
      + + + + + + + + + + + + + + + +
        +
      • +

        setCancellationHandler

        +
        public void setCancellationHandler(CancellationHandler cancellationHandler)
        +
      • +
      + + + + + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/upload/UploadManagerCallback.html b/docs/com/qingstor/sdk/upload/UploadManagerCallback.html new file mode 100644 index 0000000..47586ae --- /dev/null +++ b/docs/com/qingstor/sdk/upload/UploadManagerCallback.html @@ -0,0 +1,280 @@ + + + + + + +UploadManagerCallback (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.upload
+

类 UploadManagerCallback<O extends OutputModel>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.upload.UploadManagerCallback<O>
    • +
    +
  • +
+
+
    +
  • +
    +
    直接已知子类:
    +
    UploadTask
    +
    +
    +
    +
    public abstract class UploadManagerCallback<O extends OutputModel>
    +extends java.lang.Object
    +
    Callback of the upload manager.
    + Created by chengww on 2018/1/23.
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 抽象方法 
      限定符和类型方法和说明
      abstract voidonAPIResponse(java.lang.String objectKey, + O outputModel) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        UploadManagerCallback

        +
        public UploadManagerCallback()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + + + +
        +
      • +

        onAPIResponse

        +
        public abstract void onAPIResponse(java.lang.String objectKey,
        +                                   O outputModel)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/upload/UploadProgressListener.html b/docs/com/qingstor/sdk/upload/UploadProgressListener.html new file mode 100644 index 0000000..54a5243 --- /dev/null +++ b/docs/com/qingstor/sdk/upload/UploadProgressListener.html @@ -0,0 +1,229 @@ + + + + + + +UploadProgressListener (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.upload
+

接口 UploadProgressListener

+
+
+
+
    +
  • +
    +
    所有已知实现类:
    +
    UploadTask
    +
    +
    +
    +
    public interface UploadProgressListener
    +
    Created by chengww on 2018/12/25.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 实例方法 抽象方法 
      限定符和类型方法和说明
      voidonProgress(java.lang.String objectKey, + long currentSize, + long totalSize) 
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        onProgress

        +
        void onProgress(java.lang.String objectKey,
        +                long currentSize,
        +                long totalSize)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/upload/impl/FileRecorder.html b/docs/com/qingstor/sdk/upload/impl/FileRecorder.html new file mode 100644 index 0000000..4ee5e1f --- /dev/null +++ b/docs/com/qingstor/sdk/upload/impl/FileRecorder.html @@ -0,0 +1,344 @@ + + + + + + +FileRecorder (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.upload.impl
+

类 FileRecorder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.upload.impl.FileRecorder
    • +
    +
  • +
+
+
    +
  • +
    +
    所有已实现的接口:
    +
    Recorder
    +
    +
    +
    +
    public final class FileRecorder
    +extends java.lang.Object
    +implements Recorder
    +
    An impl of Recorder. Records will be kept in the upload as files.
    + 实现分段上传时上传进度的接口方法
    + Created by chengww on 2018/1/23.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      FileRecorder(java.lang.String directory) 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      voiddel(java.lang.String key) +
      Delete the progress of multi uploads.
      +
      byte[]get(java.lang.String key) +
      Get the progress of multi uploads.
      +
      voidset(java.lang.String key, + byte[] data) +
      A recorder who records progress of multi uploads.
      +
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        FileRecorder

        +
        public FileRecorder(java.lang.String directory)
        +             throws java.io.IOException
        +
        +
        抛出:
        +
        java.io.IOException
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        set

        +
        public void set(java.lang.String key,
        +                byte[] data)
        +
        A recorder who records progress of multi uploads.
        + 纪录分段上传进度
        +
        +
        指定者:
        +
        set 在接口中 Recorder
        +
        参数:
        +
        key - key recorded in the upload. 持久化的键
        +
        data - data recorded in the upload. 持久化的内容
        +
        +
      • +
      + + + +
        +
      • +

        get

        +
        public byte[] get(java.lang.String key)
        +
        Get the progress of multi uploads.
        + 获取分段上传进度
        +
        +
        指定者:
        +
        get 在接口中 Recorder
        +
        参数:
        +
        key - key recorded in the upload. 持久化的键
        +
        返回:
        +
        info of progress.
        +
        +
      • +
      + + + +
        +
      • +

        del

        +
        public void del(java.lang.String key)
        +
        Delete the progress of multi uploads.
        + 删除已上传文件的进度文件
        +
        +
        指定者:
        +
        del 在接口中 Recorder
        +
        参数:
        +
        key - key recorded in the upload. 持久化的键
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/upload/impl/package-frame.html b/docs/com/qingstor/sdk/upload/impl/package-frame.html new file mode 100644 index 0000000..a2f126b --- /dev/null +++ b/docs/com/qingstor/sdk/upload/impl/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.qingstor.sdk.upload.impl (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.upload.impl

+
+

+ +
+ + diff --git a/docs/com/qingstor/sdk/upload/impl/package-summary.html b/docs/com/qingstor/sdk/upload/impl/package-summary.html new file mode 100644 index 0000000..5e852d2 --- /dev/null +++ b/docs/com/qingstor/sdk/upload/impl/package-summary.html @@ -0,0 +1,143 @@ + + + + + + +com.qingstor.sdk.upload.impl (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.upload.impl

+
+
+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/upload/impl/package-tree.html b/docs/com/qingstor/sdk/upload/impl/package-tree.html new file mode 100644 index 0000000..bf4c505 --- /dev/null +++ b/docs/com/qingstor/sdk/upload/impl/package-tree.html @@ -0,0 +1,136 @@ + + + + + + +com.qingstor.sdk.upload.impl 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.upload.impl的分层结构

+程序包分层结构: + +
+
+

类分层结构

+
    +
  • java.lang.Object + +
  • +
+
+ + + + + + diff --git a/docs/com/qingstor/sdk/upload/package-frame.html b/docs/com/qingstor/sdk/upload/package-frame.html new file mode 100644 index 0000000..f09b14e --- /dev/null +++ b/docs/com/qingstor/sdk/upload/package-frame.html @@ -0,0 +1,29 @@ + + + + + + +com.qingstor.sdk.upload (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.upload

+ + + diff --git a/docs/com/qingstor/sdk/upload/package-summary.html b/docs/com/qingstor/sdk/upload/package-summary.html new file mode 100644 index 0000000..3f71d69 --- /dev/null +++ b/docs/com/qingstor/sdk/upload/package-summary.html @@ -0,0 +1,180 @@ + + + + + + +com.qingstor.sdk.upload (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.upload

+
+
+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/upload/package-tree.html b/docs/com/qingstor/sdk/upload/package-tree.html new file mode 100644 index 0000000..5fad389 --- /dev/null +++ b/docs/com/qingstor/sdk/upload/package-tree.html @@ -0,0 +1,156 @@ + + + + + + +com.qingstor.sdk.upload 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.upload的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +

接口分层结构

+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/utils/Base64.html b/docs/com/qingstor/sdk/utils/Base64.html new file mode 100644 index 0000000..500c0d7 --- /dev/null +++ b/docs/com/qingstor/sdk/utils/Base64.html @@ -0,0 +1,301 @@ + + + + + + +Base64 (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.utils
+

类 Base64

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.utils.Base64
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public final class Base64
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      Base64() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + +
      所有方法 静态方法 具体方法 
      限定符和类型方法和说明
      static byte[]decode(java.lang.String encoded) +
      Decodes Base64 data into octects
      +
      static java.lang.Stringencode(byte[] binaryData) +
      Encodes hex octects into Base64
      +
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        Base64

        +
        public Base64()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        encode

        +
        public static java.lang.String encode(byte[] binaryData)
        +
        Encodes hex octects into Base64
        +
        +
        参数:
        +
        binaryData - Array containing binaryData
        +
        返回:
        +
        Encoded Base64 array
        +
        +
      • +
      + + + +
        +
      • +

        decode

        +
        public static byte[] decode(java.lang.String encoded)
        +
        Decodes Base64 data into octects
        +
        +
        参数:
        +
        encoded - string containing Base64 data
        +
        返回:
        +
        Array containind decoded data.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/utils/QSJSONUtil.html b/docs/com/qingstor/sdk/utils/QSJSONUtil.html new file mode 100644 index 0000000..471d244 --- /dev/null +++ b/docs/com/qingstor/sdk/utils/QSJSONUtil.html @@ -0,0 +1,694 @@ + + + + + + +QSJSONUtil (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.utils
+

类 QSJSONUtil

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.utils.QSJSONUtil
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QSJSONUtil
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      QSJSONUtil() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 静态方法 具体方法 
      限定符和类型方法和说明
      static org.json.JSONObjectconvertJSONObject(java.lang.String string) 
      static booleanjsonFillValue2Object(java.lang.String jsonStr, + java.lang.Object targetObj) 
      static booleanjsonObjFillValue2Object(org.json.JSONObject o, + java.lang.Object targetObj) 
      static java.util.Map<java.lang.String,java.lang.Object>jsonToMap(org.json.JSONObject json) 
      static voidputJsonData(org.json.JSONArray jsonObject, + int index, + java.lang.Object value) 
      static voidputJsonData(org.json.JSONObject jsonObject, + java.lang.String key, + java.lang.Object value) 
      static voidresponceFillValue2Object(okhttp3.Response response, + java.lang.Object targetObj) 
      static java.util.ListsortJSONArray(org.json.JSONArray array) 
      static voidsortJSONArray(java.util.List array, + java.lang.String key) 
      static voidsortJSONArrayAscending(java.util.List array, + java.lang.String key) 
      static booleantoBoolean(org.json.JSONObject object, + java.lang.String key) 
      static java.lang.DoubletoDouble(org.json.JSONArray labelDatas, + int i) 
      static doubletoDouble(org.json.JSONObject object, + java.lang.String key) 
      static inttoInt(org.json.JSONObject object, + java.lang.String key) 
      static org.json.JSONArraytoJSONArray(org.json.JSONArray obj, + int i) 
      static org.json.JSONArraytoJSONArray(org.json.JSONObject obj, + java.lang.String key) 
      static inttoJSONInt(org.json.JSONArray jsonArray, + int index) 
      static java.lang.StringtoJSONkey(org.json.JSONObject obj, + int index) 
      static org.json.JSONObjecttoJSONObject(org.json.JSONArray jsonArray, + int index) 
      static java.lang.ObjecttoJSONObject(org.json.JSONObject obj, + int index) 
      static org.json.JSONObjecttoJSONObject(org.json.JSONObject jsonArray, + java.lang.String key) 
      static org.json.JSONObjecttoJSONObject(java.lang.String str) 
      static java.lang.StringtoJSONString(org.json.JSONArray jsonArray, + int index) 
      static java.util.List<java.lang.Object>toList(org.json.JSONArray array) 
      static java.util.ListtoList(org.json.JSONObject obj, + java.lang.String key) 
      static java.util.Map<java.lang.String,java.lang.Object>toMap(org.json.JSONObject object) 
      static java.lang.ObjecttoObject(org.json.JSONArray labelDatas, + int i) 
      static java.lang.ObjecttoObject(org.json.JSONObject labelDatas, + java.lang.String key) 
      static java.lang.StringtoString(org.json.JSONObject object, + java.lang.String key) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSJSONUtil

        +
        public QSJSONUtil()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        jsonToMap

        +
        public static java.util.Map<java.lang.String,java.lang.Object> jsonToMap(org.json.JSONObject json)
        +                                                                  throws org.json.JSONException
        +
        +
        抛出:
        +
        org.json.JSONException
        +
        +
      • +
      + + + +
        +
      • +

        toMap

        +
        public static java.util.Map<java.lang.String,java.lang.Object> toMap(org.json.JSONObject object)
        +                                                              throws org.json.JSONException
        +
        +
        抛出:
        +
        org.json.JSONException
        +
        +
      • +
      + + + +
        +
      • +

        toList

        +
        public static java.util.List<java.lang.Object> toList(org.json.JSONArray array)
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(org.json.JSONObject object,
        +                                        java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        toDouble

        +
        public static java.lang.Double toDouble(org.json.JSONArray labelDatas,
        +                                        int i)
        +
      • +
      + + + +
        +
      • +

        toObject

        +
        public static java.lang.Object toObject(org.json.JSONArray labelDatas,
        +                                        int i)
        +
      • +
      + + + +
        +
      • +

        toObject

        +
        public static java.lang.Object toObject(org.json.JSONObject labelDatas,
        +                                        java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        toBoolean

        +
        public static boolean toBoolean(org.json.JSONObject object,
        +                                java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        toInt

        +
        public static int toInt(org.json.JSONObject object,
        +                        java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        toDouble

        +
        public static double toDouble(org.json.JSONObject object,
        +                              java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        toList

        +
        public static java.util.List toList(org.json.JSONObject obj,
        +                                    java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static org.json.JSONArray toJSONArray(org.json.JSONObject obj,
        +                                             java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static java.lang.Object toJSONObject(org.json.JSONObject obj,
        +                                            int index)
        +
      • +
      + + + +
        +
      • +

        toJSONkey

        +
        public static java.lang.String toJSONkey(org.json.JSONObject obj,
        +                                         int index)
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static org.json.JSONArray toJSONArray(org.json.JSONArray obj,
        +                                             int i)
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static org.json.JSONObject toJSONObject(java.lang.String str)
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static org.json.JSONObject toJSONObject(org.json.JSONObject jsonArray,
        +                                               java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        toJSONInt

        +
        public static int toJSONInt(org.json.JSONArray jsonArray,
        +                            int index)
        +
      • +
      + + + +
        +
      • +

        putJsonData

        +
        public static void putJsonData(org.json.JSONObject jsonObject,
        +                               java.lang.String key,
        +                               java.lang.Object value)
        +
      • +
      + + + +
        +
      • +

        putJsonData

        +
        public static void putJsonData(org.json.JSONArray jsonObject,
        +                               int index,
        +                               java.lang.Object value)
        +
      • +
      + + + +
        +
      • +

        toJSONString

        +
        public static java.lang.String toJSONString(org.json.JSONArray jsonArray,
        +                                            int index)
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static org.json.JSONObject toJSONObject(org.json.JSONArray jsonArray,
        +                                               int index)
        +
      • +
      + + + +
        +
      • +

        sortJSONArray

        +
        public static java.util.List sortJSONArray(org.json.JSONArray array)
        +
      • +
      + + + +
        +
      • +

        sortJSONArray

        +
        public static void sortJSONArray(java.util.List array,
        +                                 java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        sortJSONArrayAscending

        +
        public static void sortJSONArrayAscending(java.util.List array,
        +                                          java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        convertJSONObject

        +
        public static org.json.JSONObject convertJSONObject(java.lang.String string)
        +
      • +
      + + + +
        +
      • +

        responceFillValue2Object

        +
        public static void responceFillValue2Object(okhttp3.Response response,
        +                                            java.lang.Object targetObj)
        +
      • +
      + + + +
        +
      • +

        jsonFillValue2Object

        +
        public static boolean jsonFillValue2Object(java.lang.String jsonStr,
        +                                           java.lang.Object targetObj)
        +
      • +
      + + + +
        +
      • +

        jsonObjFillValue2Object

        +
        public static boolean jsonObjFillValue2Object(org.json.JSONObject o,
        +                                              java.lang.Object targetObj)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/utils/QSLoggerUtil.html b/docs/com/qingstor/sdk/utils/QSLoggerUtil.html new file mode 100644 index 0000000..b9aa6dc --- /dev/null +++ b/docs/com/qingstor/sdk/utils/QSLoggerUtil.html @@ -0,0 +1,270 @@ + + + + + + +QSLoggerUtil (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.utils
+

类 QSLoggerUtil

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.utils.QSLoggerUtil
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QSLoggerUtil
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      QSLoggerUtil() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + +
      所有方法 静态方法 具体方法 
      限定符和类型方法和说明
      static java.util.logging.LoggersetLoggerHanlder(java.lang.String loggerName) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSLoggerUtil

        +
        public QSLoggerUtil()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        setLoggerHanlder

        +
        public static java.util.logging.Logger setLoggerHanlder(java.lang.String loggerName)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/utils/QSParamInvokeUtil.html b/docs/com/qingstor/sdk/utils/QSParamInvokeUtil.html new file mode 100644 index 0000000..6f45d75 --- /dev/null +++ b/docs/com/qingstor/sdk/utils/QSParamInvokeUtil.html @@ -0,0 +1,356 @@ + + + + + + +QSParamInvokeUtil (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.utils
+

类 QSParamInvokeUtil

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.utils.QSParamInvokeUtil
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QSParamInvokeUtil
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 静态方法 具体方法 
      限定符和类型方法和说明
      static java.lang.Stringcapitalize(java.lang.String word) 
      static java.lang.ObjectgetOutputModel(java.lang.Class className) 
      static OutputModelgetOutputModel(ResponseCallBack o) 
      static java.util.MapgetRequestParams(java.lang.Object model, + java.lang.String paramType) 
      static voidinvokeObject2Map(java.lang.Class sourceClass, + java.lang.Object source, + java.util.Map targetParametersMap) 
      static java.util.MapserializeParams(java.util.Map parameters) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSParamInvokeUtil

        +
        public QSParamInvokeUtil()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getRequestParams

        +
        public static java.util.Map getRequestParams(java.lang.Object model,
        +                                             java.lang.String paramType)
        +
      • +
      + + + +
        +
      • +

        invokeObject2Map

        +
        public static void invokeObject2Map(java.lang.Class sourceClass,
        +                                    java.lang.Object source,
        +                                    java.util.Map targetParametersMap)
        +                             throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        capitalize

        +
        public static java.lang.String capitalize(java.lang.String word)
        +
      • +
      + + + +
        +
      • +

        getOutputModel

        +
        public static java.lang.Object getOutputModel(java.lang.Class className)
        +                                       throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        serializeParams

        +
        public static java.util.Map serializeParams(java.util.Map parameters)
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/utils/QSServerSignatureUtil.html b/docs/com/qingstor/sdk/utils/QSServerSignatureUtil.html new file mode 100644 index 0000000..c83dde4 --- /dev/null +++ b/docs/com/qingstor/sdk/utils/QSServerSignatureUtil.html @@ -0,0 +1,315 @@ + + + + + + +QSServerSignatureUtil (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.utils
+

类 QSServerSignatureUtil

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.utils.QSServerSignatureUtil
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QSServerSignatureUtil
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + +
      所有方法 静态方法 具体方法 
      限定符和类型方法和说明
      static java.lang.StringgenerateAuthorization(java.lang.String accessKey, + java.lang.String secretKey, + java.lang.String strToSign) +
      Generate signature for request against QingStor.
      +
      static java.lang.StringgenerateSignature(java.lang.String secretKey, + java.lang.String strToSign) +
      Generate signature for request against QingStor.
      +
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSServerSignatureUtil

        +
        public QSServerSignatureUtil()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        generateAuthorization

        +
        public static java.lang.String generateAuthorization(java.lang.String accessKey,
        +                                                     java.lang.String secretKey,
        +                                                     java.lang.String strToSign)
        +
        Generate signature for request against QingStor.
        +
        +
        参数:
        +
        accessKey: - API access key ID
        +
        secretKey: - API secret access key ID
        +
        strToSign: - strToSign
        +
        返回:
        +
        a string which can be used as value of HTTP request header field "Authorization" + directly. +

        See https://docs.qingcloud.com/qingstor/api/common/signature.html for more details + about how to do signature of request against QingStor.

        +
        +
      • +
      + + + +
        +
      • +

        generateSignature

        +
        public static java.lang.String generateSignature(java.lang.String secretKey,
        +                                                 java.lang.String strToSign)
        +
        Generate signature for request against QingStor.
        +
        +
        参数:
        +
        secretKey - API secret access key ID
        +
        strToSign - string to sign
        +
        返回:
        +
        signature + +

        See https://docs.qingcloud.com/qingstor/api/common/signature.html for more details

        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/utils/QSSignatureUtil.html b/docs/com/qingstor/sdk/utils/QSSignatureUtil.html new file mode 100644 index 0000000..da95374 --- /dev/null +++ b/docs/com/qingstor/sdk/utils/QSSignatureUtil.html @@ -0,0 +1,498 @@ + + + + + + +QSSignatureUtil (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.utils
+

类 QSSignatureUtil

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.utils.QSSignatureUtil
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QSSignatureUtil
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 静态方法 具体方法 
      限定符和类型方法和说明
      static java.lang.StringformatGmtDate(java.util.Date date) 
      static java.lang.StringgenerateAuthorization(java.lang.String accessKey, + java.lang.String secretKey, + java.lang.String strToSign) +
      Generate signature for request against QingStor.
      +
      static java.lang.StringgenerateAuthorization(java.lang.String accessKey, + java.lang.String secretKey, + java.lang.String method, + java.lang.String requestURI, + java.util.Map<java.lang.String,java.lang.String> params, + java.util.Map<java.lang.String,java.lang.String> headers) +
      Generate signature for request against QingStor.
      +
      static java.lang.StringgenerateQSURL(java.util.Map<java.lang.String,java.lang.String> parameters, + java.lang.String requestUrl) 
      static java.lang.StringgenerateSignature(java.lang.String secretKey, + java.lang.String strToSign) 
      static java.lang.StringgenerateSignature(java.lang.String secretKey, + java.lang.String method, + java.lang.String requestURI, + java.util.Map<java.lang.String,java.lang.String> params, + java.util.Map<java.lang.String,java.lang.String> headers) +
      Generate signature for request against QingStor.
      +
      static java.lang.StringgetExpireAuth(java.util.Map context, + long expiresSecond, + RequestInputModel params) 
      static java.lang.StringgetObjectAuthRequestUrl(EnvContext envContext, + java.lang.String zone, + java.lang.String bucketName, + java.lang.String objectName, + int expiresSecond) 
      static java.lang.StringgetStringToSignature(java.lang.String method, + java.lang.String authPath, + java.util.Map<java.lang.String,java.lang.String> params, + java.util.Map<java.lang.String,java.lang.String> headers) 
      static booleanisSubKey(java.lang.String key) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSSignatureUtil

        +
        public QSSignatureUtil()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        generateQSURL

        +
        public static java.lang.String generateQSURL(java.util.Map<java.lang.String,java.lang.String> parameters,
        +                                             java.lang.String requestUrl)
        +                                      throws QSException
        +
        +
        参数:
        +
        parameters - parameters to sign
        +
        requestUrl - base request url
        +
        返回:
        +
        generated url
        +
        抛出:
        +
        QSException - UnsupportedEncodingException
        +
        +
      • +
      + + + +
        +
      • +

        generateAuthorization

        +
        public static java.lang.String generateAuthorization(java.lang.String accessKey,
        +                                                     java.lang.String secretKey,
        +                                                     java.lang.String method,
        +                                                     java.lang.String requestURI,
        +                                                     java.util.Map<java.lang.String,java.lang.String> params,
        +                                                     java.util.Map<java.lang.String,java.lang.String> headers)
        +
        Generate signature for request against QingStor.
        +
        +
        参数:
        +
        accessKey: - API access key ID
        +
        secretKey: - API secret access key ID
        +
        method: - HTTP method
        +
        requestURI: -
        +
        params: - HTTP request parameters
        +
        headers: - HTTP request headers
        +
        返回:
        +
        a string which can be used as value of HTTP request header field "Authorization" + directly. +

        See https://docs.qingcloud.com/qingstor/api/common/signature.html for more details + about how to do signature of request against QingStor.

        +
        +
      • +
      + + + +
        +
      • +

        generateAuthorization

        +
        public static java.lang.String generateAuthorization(java.lang.String accessKey,
        +                                                     java.lang.String secretKey,
        +                                                     java.lang.String strToSign)
        +
        Generate signature for request against QingStor.
        +
        +
        参数:
        +
        accessKey: - API access key ID
        +
        secretKey: - API secret access key ID
        +
        strToSign: - strToSign
        +
        返回:
        +
        a string which can be used as value of HTTP request header field "Authorization" + directly. +

        See https://docs.qingcloud.com/qingstor/api/common/signature.html for more details + about how to do signature of request against QingStor.

        +
        +
      • +
      + + + +
        +
      • +

        generateSignature

        +
        public static java.lang.String generateSignature(java.lang.String secretKey,
        +                                                 java.lang.String method,
        +                                                 java.lang.String requestURI,
        +                                                 java.util.Map<java.lang.String,java.lang.String> params,
        +                                                 java.util.Map<java.lang.String,java.lang.String> headers)
        +
        Generate signature for request against QingStor.
        +
        +
        参数:
        +
        secretKey: - API secret access key ID
        +
        method: - HTTP method
        +
        requestURI: -
        +
        params: - HTTP request parameters
        +
        headers: - HTTP request headers
        +
        返回:
        +
        a string which can be used as value of HTTP request header field "Authorization" + directly. +

        See https://docs.qingcloud.com/qingstor/api/common/signature.html for more details + about how to do signature of request against QingStor.

        +
        +
      • +
      + + + +
        +
      • +

        getStringToSignature

        +
        public static java.lang.String getStringToSignature(java.lang.String method,
        +                                                    java.lang.String authPath,
        +                                                    java.util.Map<java.lang.String,java.lang.String> params,
        +                                                    java.util.Map<java.lang.String,java.lang.String> headers)
        +
      • +
      + + + +
        +
      • +

        generateSignature

        +
        public static java.lang.String generateSignature(java.lang.String secretKey,
        +                                                 java.lang.String strToSign)
        +
      • +
      + + + +
        +
      • +

        isSubKey

        +
        public static boolean isSubKey(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        formatGmtDate

        +
        public static java.lang.String formatGmtDate(java.util.Date date)
        +
      • +
      + + + +
        +
      • +

        getObjectAuthRequestUrl

        +
        public static java.lang.String getObjectAuthRequestUrl(EnvContext envContext,
        +                                                       java.lang.String zone,
        +                                                       java.lang.String bucketName,
        +                                                       java.lang.String objectName,
        +                                                       int expiresSecond)
        +                                                throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        getExpireAuth

        +
        public static java.lang.String getExpireAuth(java.util.Map context,
        +                                             long expiresSecond,
        +                                             RequestInputModel params)
        +                                      throws java.io.UnsupportedEncodingException
        +
        +
        抛出:
        +
        java.io.UnsupportedEncodingException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/utils/QSStringUtil.html b/docs/com/qingstor/sdk/utils/QSStringUtil.html new file mode 100644 index 0000000..0dee796 --- /dev/null +++ b/docs/com/qingstor/sdk/utils/QSStringUtil.html @@ -0,0 +1,430 @@ + + + + + + +QSStringUtil (qingstor-sdk-android docs) + + + + + + + + + + + + +
+
com.qingstor.sdk.utils
+

类 QSStringUtil

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.qingstor.sdk.utils.QSStringUtil
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class QSStringUtil
    +extends java.lang.Object
    +
    Created by on 11/4/15.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      QSStringUtil() 
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 静态方法 具体方法 
      限定符和类型方法和说明
      static java.lang.StringasciiCharactersEncoding(java.lang.String str) +
      Chinese characters transform
      +
      static org.json.JSONObjectgetMapToJson(java.util.Map o) 
      static java.lang.StringgetObjectToJson(java.lang.Object o) 
      static java.lang.StringgetParameterRequired(java.lang.String paraName, + java.lang.String value) 
      static java.lang.StringgetParameterValueNotAllowedError(java.lang.String paraName, + java.lang.String value, + java.lang.String[] values) 
      static java.lang.StringgetUserAgent() 
      static booleanisEmpty(java.lang.String str) 
      static java.lang.ObjectobjectJSONValue(java.lang.Object o) 
      static java.lang.StringobjectToJson(java.lang.String key, + java.lang.Object o) 
      static java.lang.StringpercentEncode(java.lang.String value, + java.lang.String encoding) 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        QSStringUtil

        +
        public QSStringUtil()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        objectToJson

        +
        public static java.lang.String objectToJson(java.lang.String key,
        +                                            java.lang.Object o)
        +                                     throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        objectJSONValue

        +
        public static java.lang.Object objectJSONValue(java.lang.Object o)
        +                                        throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        getMapToJson

        +
        public static org.json.JSONObject getMapToJson(java.util.Map o)
        +                                        throws QSException
        +
        +
        抛出:
        +
        QSException
        +
        +
      • +
      + + + +
        +
      • +

        getObjectToJson

        +
        public static java.lang.String getObjectToJson(java.lang.Object o)
        +
      • +
      + + + +
        +
      • +

        percentEncode

        +
        public static java.lang.String percentEncode(java.lang.String value,
        +                                             java.lang.String encoding)
        +                                      throws java.io.UnsupportedEncodingException
        +
        +
        抛出:
        +
        java.io.UnsupportedEncodingException
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public static boolean isEmpty(java.lang.String str)
        +
      • +
      + + + +
        +
      • +

        getUserAgent

        +
        public static java.lang.String getUserAgent()
        +
      • +
      + + + +
        +
      • +

        getParameterRequired

        +
        public static java.lang.String getParameterRequired(java.lang.String paraName,
        +                                                    java.lang.String value)
        +
      • +
      + + + +
        +
      • +

        getParameterValueNotAllowedError

        +
        public static java.lang.String getParameterValueNotAllowedError(java.lang.String paraName,
        +                                                                java.lang.String value,
        +                                                                java.lang.String[] values)
        +
      • +
      + + + +
        +
      • +

        asciiCharactersEncoding

        +
        public static java.lang.String asciiCharactersEncoding(java.lang.String str)
        +                                                throws QSException
        +
        Chinese characters transform
        +
        +
        参数:
        +
        str - unEncoded chars
        +
        返回:
        +
        encoded chars
        +
        抛出:
        +
        QSException - UnsupportedEncodingException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/docs/com/qingstor/sdk/utils/package-frame.html b/docs/com/qingstor/sdk/utils/package-frame.html new file mode 100644 index 0000000..f0bad12 --- /dev/null +++ b/docs/com/qingstor/sdk/utils/package-frame.html @@ -0,0 +1,27 @@ + + + + + + +com.qingstor.sdk.utils (qingstor-sdk-android docs) + + + + + +

com.qingstor.sdk.utils

+ + + diff --git a/docs/com/qingstor/sdk/utils/package-summary.html b/docs/com/qingstor/sdk/utils/package-summary.html new file mode 100644 index 0000000..0d05434 --- /dev/null +++ b/docs/com/qingstor/sdk/utils/package-summary.html @@ -0,0 +1,167 @@ + + + + + + +com.qingstor.sdk.utils (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包 com.qingstor.sdk.utils

+
+
+ +
+ + + + + + diff --git a/docs/com/qingstor/sdk/utils/package-tree.html b/docs/com/qingstor/sdk/utils/package-tree.html new file mode 100644 index 0000000..5a34711 --- /dev/null +++ b/docs/com/qingstor/sdk/utils/package-tree.html @@ -0,0 +1,142 @@ + + + + + + +com.qingstor.sdk.utils 类分层结构 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

程序包com.qingstor.sdk.utils的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +
+ + + + + + diff --git a/docs/constant-values.html b/docs/constant-values.html new file mode 100644 index 0000000..1cba9ef --- /dev/null +++ b/docs/constant-values.html @@ -0,0 +1,610 @@ + + + + + + +常量字段值 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

常量字段值

+

目录

+ +
+
+ + +

com.chengww.*

+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    com.chengww.qingstor_sdk_android.db.Progress 
    限定符和类型常量字段
    + +public static final java.lang.StringBUCKET"bucket"
    + +public static final java.lang.StringCURRENT_SIZE"currentSize"
    + +public static final java.lang.StringDATE"date"
    + +public static final intERROR4
    + +public static final java.lang.StringEXTRA1"extra1"
    + +public static final java.lang.StringEXTRA2"extra2"
    + +public static final java.lang.StringEXTRA3"extra3"
    + +public static final java.lang.StringFILE_NAME"fileName"
    + +public static final java.lang.StringFILE_PATH"filePath"
    + +public static final intFINISH5
    + +public static final java.lang.StringFOLDER"folder"
    + +public static final java.lang.StringFRACTION"fraction"
    + +public static final intLOADING2
    + +public static final intNONE0
    + +public static final java.lang.StringOBJECT_KEY"objectKey"
    + +public static final intPAUSE3
    + +public static final java.lang.StringRECORDER_BEAN"recorder_bean"
    + +public static final java.lang.StringSTATUS"status"
    + +public static final java.lang.StringTAG"tag"
    + +public static final java.lang.StringTOTAL_SIZE"totalSize"
    + +public static final intWAITING1
    +
  • +
+
    +
  • + + + + + + + + + + + + + + +
    com.chengww.qingstor_sdk_android.task.Downloader 
    限定符和类型常量字段
    + +public static final java.lang.StringTAG"Qingstor_Downloader"
    +
  • +
  • + + + + + + + + + + + + + + +
    com.chengww.qingstor_sdk_android.task.Uploader 
    限定符和类型常量字段
    + +public static final java.lang.StringTAG"Qingstor_Uploader"
    +
  • +
+ + + +

com.qingstor.*

+ +
+ + + + + + diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html new file mode 100644 index 0000000..7d10e7e --- /dev/null +++ b/docs/deprecated-list.html @@ -0,0 +1,209 @@ + + + + + + +已过时的列表 (qingstor-sdk-android docs) + + + + + + + + +
+ + + + + + + +
+ + +
+

已过时的 API

+

目录

+ +
+ + +
+ + + + + + + +
+ + + + diff --git a/docs/help-doc.html b/docs/help-doc.html new file mode 100644 index 0000000..9801591 --- /dev/null +++ b/docs/help-doc.html @@ -0,0 +1,224 @@ + + + + + + +API 帮助 (qingstor-sdk-android docs) + + + + + + + + +
+ + + + + + + +
+ + +
+

此 API 文档的组织方式

+
此 API (应用程序编程接口) 文档包含对应于导航栏中的项目的页面, 如下所述。
+
+
+
    +
  • +

    概览

    +

    概览 页面是此 API 文档的首页, 提供了所有程序包的列表及其概要。此页面也可能包含这些程序包的总体说明。

    +
  • +
  • +

    程序包

    +

    每个程序包都有一个页面, 其中包含它的类和接口的列表及其概要。此页面可以包含六个类别:

    +
      +
    • 接口 (斜体)
    • +
    • +
    • 枚举
    • +
    • 异常错误
    • +
    • 错误
    • +
    • 注释类型
    • +
    +
  • +
  • +

    类/接口

    +

    每个类, 接口, 嵌套类和嵌套接口都有各自的页面。其中每个页面都由三部分 (类/接口说明, 概要表, 以及详细的成员说明) 组成:

    +
      +
    • 类继承图
    • +
    • 直接子类
    • +
    • 所有已知子接口
    • +
    • 所有已知实现类
    • +
    • 类/接口声明
    • +
    • 类/接口说明
    • +
    +
      +
    • 嵌套类概要
    • +
    • 字段概要
    • +
    • 构造器概要
    • +
    • 方法概要
    • +
    +
      +
    • 字段详细资料
    • +
    • 构造器详细资料
    • +
    • 方法详细资料
    • +
    +

    每个概要条目都包含该项目的详细说明的第一句。概要条目按字母顺序排列, 而详细说明则按其在源代码中出现的顺序排列。这样保持了程序员所建立的逻辑分组。

    +
  • +
  • +

    注释类型

    +

    每个注释类型都有各自的页面, 其中包含以下部分:

    +
      +
    • 注释类型声明
    • +
    • 注释类型说明
    • +
    • 必需元素概要
    • +
    • 可选元素概要
    • +
    • 元素详细资料
    • +
    +
  • +
  • +

    枚举

    +

    每个枚举都有各自的页面, 其中包含以下部分:

    +
      +
    • 枚举声明
    • +
    • 枚举说明
    • +
    • 枚举常量概要
    • +
    • 枚举常量详细资料
    • +
    +
  • +
  • +

    树 (类分层结构)

    +

    对于所有程序包, 有一个类分层结构页面, 以及每个程序包的分层结构。每个分层结构页面都包含类的列表和接口的列表。从java.lang.Object开始, 按继承结构对类进行排列。接口不从java.lang.Object继承。

    +
      +
    • 查看“概览”页面时, 单击 "树" 将显示所有程序包的分层结构。
    • +
    • 查看特定程序包, 类或接口页面时, 单击 "树" 将仅显示该程序包的分层结构。
    • +
    +
  • +
  • +

    已过时的 API

    +

    已过时的 API 页面列出了所有已过时的 API。一般由于进行了改进并且通常提供了替代的 API, 所以建议不要使用已过时的 API。在将来的实现过程中, 可能会删除已过时的 API。

    +
  • +
  • +

    索引

    +

    索引 包含按字母顺序排列的所有类, 接口, 构造器, 方法和字段的列表。

    +
  • +
  • +

    上一个/下一个

    +

    这些链接使您可以转至下一个或上一个类, 接口, 程序包或相关页面。

    +
  • +
  • +

    框架/无框架

    +

    这些链接用于显示和隐藏 HTML 框架。所有页面均具有有框架和无框架两种显示方式。

    +
  • +
  • +

    所有类

    +

    所有类链接显示所有类和接口 (除了非静态嵌套类型)。

    +
  • +
  • +

    序列化表格

    +

    每个可序列化或可外部化的类都有其序列化字段和方法的说明。此信息对重新实现者有用, 而对使用 API 的开发者则没有什么用处。尽管导航栏中没有链接, 但您可以通过下列方式获取此信息: 转至任何序列化类, 然后单击类说明的 "另请参阅" 部分中的 "序列化表格"。

    +
  • +
  • +

    常量字段值

    +

    常量字段值页面列出了静态最终字段及其值。

    +
  • +
+此帮助文件适用于使用标准 doclet 生成的 API 文档。
+ +
+ + + + + + + +
+ + + + diff --git a/docs/index-all.html b/docs/index-all.html new file mode 100644 index 0000000..9efb551 --- /dev/null +++ b/docs/index-all.html @@ -0,0 +1,3943 @@ + + + + + + +索引 (qingstor-sdk-android docs) + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G H I J K L M N O P Q R S T U V W X  + + +

A

+
+
AbortIncompleteMultipartUploadModel() - 类 的构造器com.qingstor.sdk.service.Types.AbortIncompleteMultipartUploadModel
+
 
+
abortMultipartUpload(String, Bucket.AbortMultipartUploadInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
abortMultipartUploadAsync(String, Bucket.AbortMultipartUploadInput, ResponseCallBack<Bucket.AbortMultipartUploadOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
abortMultipartUploadAsyncRequest(String, Bucket.AbortMultipartUploadInput, ResponseCallBack<Bucket.AbortMultipartUploadOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
AbortMultipartUploadInput() - 类 的构造器com.qingstor.sdk.service.Bucket.AbortMultipartUploadInput
+
 
+
AbortMultipartUploadOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.AbortMultipartUploadOutput
+
 
+
abortMultipartUploadRequest(String, Bucket.AbortMultipartUploadInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
ACLModel() - 类 的构造器com.qingstor.sdk.service.Types.ACLModel
+
 
+
addColumn(ColumnEntity) - 类 中的方法com.chengww.qingstor_sdk_android.db.TableEntity
+
 
+
addOnAllTaskEndListener(XExecutor.OnAllTaskEndListener) - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
addOnAllTaskEndListener(XExecutor.OnAllTaskEndListener) - 类 中的方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
addOnAllTaskEndListener(XExecutor.OnAllTaskEndListener) - 类 中的方法com.chengww.qingstor_sdk_android.task.XExecutor
+
 
+
addOnTaskEndListener(XExecutor.OnTaskEndListener) - 类 中的方法com.chengww.qingstor_sdk_android.task.XExecutor
+
 
+
afterExecute(Runnable, Throwable) - 类 中的方法com.chengww.qingstor_sdk_android.task.XExecutor
+
 
+
asciiCharactersEncoding(String) - 类 中的静态方法com.qingstor.sdk.utils.QSStringUtil
+
+
Chinese characters transform
+
+
+ + + +

B

+
+
Base64 - com.qingstor.sdk.utils中的类
+
 
+
Base64() - 类 的构造器com.qingstor.sdk.utils.Base64
+
 
+
BaseDao<T> - com.chengww.qingstor_sdk_android.db中的类
+
 
+
BaseDao(SQLiteOpenHelper) - 类 的构造器com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
BaseDao.Action - com.chengww.qingstor_sdk_android.db中的接口
+
 
+
BodyProgressListener - com.qingstor.sdk.request中的接口
+
 
+
BREAKPOINT_EXPIRED() - 异常错误 中的静态方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
BREAKPOINT_NOT_EXIST() - 异常错误 中的静态方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
BUCKET - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
Bucket - com.qingstor.sdk.service中的类
+
+
Most of operations in qingstore can be found in this class.
+
+
Bucket(EnvContext, String, String) - 类 的构造器com.qingstor.sdk.service.Bucket
+
 
+
Bucket.AbortMultipartUploadInput - com.qingstor.sdk.service中的类
+
+
AbortMultipartUploadInput: an input stream of the bucket.
+
+
Bucket.AbortMultipartUploadOutput - com.qingstor.sdk.service中的类
+
+
AbortMultipartUploadOutput: an output stream of the bucket.
+
+
Bucket.CompleteMultipartUploadInput - com.qingstor.sdk.service中的类
+
+
CompleteMultipartUploadInput: an input stream of the bucket.
+
+
Bucket.CompleteMultipartUploadOutput - com.qingstor.sdk.service中的类
+
+
CompleteMultipartUploadOutput: an output stream of the bucket.
+
+
Bucket.DeleteBucketCORSOutput - com.qingstor.sdk.service中的类
+
+
DeleteBucketCORSOutput: an output stream of the bucket.
+
+
Bucket.DeleteBucketExternalMirrorOutput - com.qingstor.sdk.service中的类
+
+
DeleteBucketExternalMirrorOutput: an output stream of the bucket.
+
+
Bucket.DeleteBucketLifecycleOutput - com.qingstor.sdk.service中的类
+
+
DeleteBucketLifecycleOutput: an output stream of the bucket.
+
+
Bucket.DeleteBucketNotificationOutput - com.qingstor.sdk.service中的类
+
+
DeleteBucketNotificationOutput: an output stream of the bucket.
+
+
Bucket.DeleteBucketOutput - com.qingstor.sdk.service中的类
+
+
DeleteBucketOutput: an output stream of the bucket.
+
+
Bucket.DeleteBucketPolicyOutput - com.qingstor.sdk.service中的类
+
+
DeleteBucketPolicyOutput: an output stream of the bucket.
+
+
Bucket.DeleteMultipleObjectsInput - com.qingstor.sdk.service中的类
+
+
DeleteMultipleObjectsInput: an input stream of the bucket.
+
+
Bucket.DeleteMultipleObjectsOutput - com.qingstor.sdk.service中的类
+
+
DeleteMultipleObjectsOutput: an output stream of the bucket.
+
+
Bucket.DeleteObjectOutput - com.qingstor.sdk.service中的类
+
+
DeleteObjectOutput: an output stream of the bucket.
+
+
Bucket.GetBucketACLOutput - com.qingstor.sdk.service中的类
+
+
GetBucketACLOutput: an output stream of the bucket.
+
+
Bucket.GetBucketCORSOutput - com.qingstor.sdk.service中的类
+
+
GetBucketCORSOutput: an output stream of the bucket.
+
+
Bucket.GetBucketExternalMirrorOutput - com.qingstor.sdk.service中的类
+
+
GetBucketExternalMirrorOutput: an output stream of the bucket.
+
+
Bucket.GetBucketLifecycleOutput - com.qingstor.sdk.service中的类
+
+
GetBucketLifecycleOutput: an output stream of the bucket.
+
+
Bucket.GetBucketNotificationOutput - com.qingstor.sdk.service中的类
+
+
GetBucketNotificationOutput: an output stream of the bucket.
+
+
Bucket.GetBucketPolicyOutput - com.qingstor.sdk.service中的类
+
+
GetBucketPolicyOutput: an output stream of the bucket.
+
+
Bucket.GetBucketStatisticsOutput - com.qingstor.sdk.service中的类
+
+
GetBucketStatisticsOutput: an output stream of the bucket.
+
+
Bucket.GetObjectInput - com.qingstor.sdk.service中的类
+
+
GetObjectInput: an input stream of the bucket.
+
+
Bucket.GetObjectOutput - com.qingstor.sdk.service中的类
+
+
GetObjectOutput: an output stream of the bucket.
+
+
Bucket.HeadBucketOutput - com.qingstor.sdk.service中的类
+
+
HeadBucketOutput: an output stream of the bucket.
+
+
Bucket.HeadObjectInput - com.qingstor.sdk.service中的类
+
+
HeadObjectInput: an input stream of the bucket.
+
+
Bucket.HeadObjectOutput - com.qingstor.sdk.service中的类
+
+
HeadObjectOutput: an output stream of the bucket.
+
+
Bucket.ImageProcessInput - com.qingstor.sdk.service中的类
+
+
ImageProcessInput: an input stream of the bucket.
+
+
Bucket.ImageProcessOutput - com.qingstor.sdk.service中的类
+
+
ImageProcessOutput: an output stream of the bucket.
+
+
Bucket.InitiateMultipartUploadInput - com.qingstor.sdk.service中的类
+
+
InitiateMultipartUploadInput: an input stream of the bucket.
+
+
Bucket.InitiateMultipartUploadOutput - com.qingstor.sdk.service中的类
+
+
InitiateMultipartUploadOutput: an output stream of the bucket.
+
+
Bucket.ListMultipartInput - com.qingstor.sdk.service中的类
+
+
ListMultipartInput: an input stream of the bucket.
+
+
Bucket.ListMultipartOutput - com.qingstor.sdk.service中的类
+
+
ListMultipartOutput: an output stream of the bucket.
+
+
Bucket.ListMultipartUploadsInput - com.qingstor.sdk.service中的类
+
+
ListMultipartUploadsInput: an input stream of the bucket.
+
+
Bucket.ListMultipartUploadsOutput - com.qingstor.sdk.service中的类
+
+
ListMultipartUploadsOutput: an output stream of the bucket.
+
+
Bucket.ListObjectsInput - com.qingstor.sdk.service中的类
+
+
ListObjectsInput: an input stream of the bucket.
+
+
Bucket.ListObjectsOutput - com.qingstor.sdk.service中的类
+
+
ListObjectsOutput: an output stream of the bucket.
+
+
Bucket.OptionsObjectInput - com.qingstor.sdk.service中的类
+
+
OptionsObjectInput: an input stream of the bucket.
+
+
Bucket.OptionsObjectOutput - com.qingstor.sdk.service中的类
+
+
OptionsObjectOutput: an output stream of the bucket.
+
+
Bucket.PutBucketACLInput - com.qingstor.sdk.service中的类
+
+
PutBucketACLInput: an input stream of the bucket.
+
+
Bucket.PutBucketACLOutput - com.qingstor.sdk.service中的类
+
+
PutBucketACLOutput: an output stream of the bucket.
+
+
Bucket.PutBucketCORSInput - com.qingstor.sdk.service中的类
+
+
PutBucketCORSInput: an input stream of the bucket.
+
+
Bucket.PutBucketCORSOutput - com.qingstor.sdk.service中的类
+
+
PutBucketCORSOutput: an output stream of the bucket.
+
+
Bucket.PutBucketExternalMirrorInput - com.qingstor.sdk.service中的类
+
+
PutBucketExternalMirrorInput: an input stream of the bucket.
+
+
Bucket.PutBucketExternalMirrorOutput - com.qingstor.sdk.service中的类
+
+
PutBucketExternalMirrorOutput: an output stream of the bucket.
+
+
Bucket.PutBucketLifecycleInput - com.qingstor.sdk.service中的类
+
+
PutBucketLifecycleInput: an input stream of the bucket.
+
+
Bucket.PutBucketLifecycleOutput - com.qingstor.sdk.service中的类
+
+
PutBucketLifecycleOutput: an output stream of the bucket.
+
+
Bucket.PutBucketNotificationInput - com.qingstor.sdk.service中的类
+
+
PutBucketNotificationInput: an input stream of the bucket.
+
+
Bucket.PutBucketNotificationOutput - com.qingstor.sdk.service中的类
+
+
PutBucketNotificationOutput: an output stream of the bucket.
+
+
Bucket.PutBucketOutput - com.qingstor.sdk.service中的类
+
+
PutBucketOutput: an output stream of the bucket.
+
+
Bucket.PutBucketPolicyInput - com.qingstor.sdk.service中的类
+
+
PutBucketPolicyInput: an input stream of the bucket.
+
+
Bucket.PutBucketPolicyOutput - com.qingstor.sdk.service中的类
+
+
PutBucketPolicyOutput: an output stream of the bucket.
+
+
Bucket.PutObjectInput - com.qingstor.sdk.service中的类
+
+
PutObjectInput: an input stream of the bucket.
+
+
Bucket.PutObjectOutput - com.qingstor.sdk.service中的类
+
+
PutObjectOutput: an output stream of the bucket.
+
+
Bucket.UploadMultipartInput - com.qingstor.sdk.service中的类
+
+
UploadMultipartInput: an input stream of the bucket.
+
+
Bucket.UploadMultipartOutput - com.qingstor.sdk.service中的类
+
+
UploadMultipartOutput: an output stream of the bucket.
+
+
BUCKET_NAME_REPLACE - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
BucketModel() - 类 的构造器com.qingstor.sdk.service.Types.BucketModel
+
 
+
build() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.CropParam.Builder
+
 
+
build() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.ResizeParam.Builder
+
 
+
build() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.WaterMarkImageParam.Builder
+
 
+
build() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.WaterMarkParam.Builder
+
 
+
buildContentValues(Progress) - 类 中的静态方法com.chengww.qingstor_sdk_android.db.Progress
+
 
+
Builder() - 类 的构造器com.qingstor.sdk.client.ImageProcessClient.CropParam.Builder
+
 
+
Builder() - 类 的构造器com.qingstor.sdk.client.ImageProcessClient.ResizeParam.Builder
+
 
+
Builder(String) - 类 的构造器com.qingstor.sdk.client.ImageProcessClient.WaterMarkImageParam.Builder
+
 
+
Builder(String) - 类 的构造器com.qingstor.sdk.client.ImageProcessClient.WaterMarkParam.Builder
+
 
+
buildOptParamStr() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.CropParam
+
 
+
buildOptParamStr() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.FormatParam
+
 
+
buildOptParamStr() - 接口 中的方法com.qingstor.sdk.client.ImageProcessClient.ImageParam
+
 
+
buildOptParamStr() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.InfoParam
+
 
+
buildOptParamStr() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.ResizeParam
+
 
+
buildOptParamStr() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.RotateParam
+
 
+
buildOptParamStr() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.WaterMarkImageParam
+
 
+
buildOptParamStr() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.WaterMarkParam
+
 
+
buildRequest(String, String, RequestBody, Map) - 类 中的方法com.qingstor.sdk.request.QSOkHttpRequestClient
+
 
+
buildTableString() - 类 中的方法com.chengww.qingstor_sdk_android.db.TableEntity
+
 
+
buildUpdateContentValues(Progress) - 类 中的静态方法com.chengww.qingstor_sdk_android.db.Progress
+
 
+
buildUrlRequest(String) - 类 中的方法com.qingstor.sdk.request.QSOkHttpRequestClient
+
 
+
+ + + +

C

+
+
call(SQLiteDatabase) - 接口 中的方法com.chengww.qingstor_sdk_android.db.BaseDao.Action
+
 
+
call(Progress) - 接口 中的方法com.chengww.qingstor_sdk_android.db.Progress.Action
+
 
+
CancellationException() - 异常错误 的构造器com.qingstor.sdk.request.CancellationHandler.CancellationException
+
 
+
CancellationHandler - com.qingstor.sdk.request中的接口
+
+
Created by chengww on 2018/1/22.
+
+
CancellationHandler.CancellationException - com.qingstor.sdk.request中的异常错误
+
 
+
capitalize(String) - 类 中的静态方法com.qingstor.sdk.utils.QSParamInvokeUtil
+
 
+
changeProgress(Progress, long, Progress.Action) - 类 中的静态方法com.chengww.qingstor_sdk_android.db.Progress
+
 
+
changeProgress(Progress, long, long, Progress.Action) - 类 中的静态方法com.chengww.qingstor_sdk_android.db.Progress
+
 
+
check() - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
checkNotNull(T, String) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
 
+
clear() - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
clear() - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
clear() - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
closeDatabase(SQLiteDatabase, Cursor) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
closeQuietly(Closeable) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
 
+
CloudfuncArgsModel() - 类 的构造器com.qingstor.sdk.service.Types.CloudfuncArgsModel
+
 
+
color(String) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.WaterMarkParam.Builder
+
 
+
ColumnEntity - com.chengww.qingstor_sdk_android.db中的类
+
+
Created by chengww on 2018/12/28.
+
+
ColumnEntity(String...) - 类 的构造器com.chengww.qingstor_sdk_android.db.ColumnEntity
+
 
+
ColumnEntity(String, String) - 类 的构造器com.chengww.qingstor_sdk_android.db.ColumnEntity
+
 
+
ColumnEntity(String, String, boolean, boolean) - 类 的构造器com.chengww.qingstor_sdk_android.db.ColumnEntity
+
 
+
ColumnEntity(String, String, boolean, boolean, boolean) - 类 的构造器com.chengww.qingstor_sdk_android.db.ColumnEntity
+
 
+
columnName - 类 中的变量com.chengww.qingstor_sdk_android.db.ColumnEntity
+
 
+
columnType - 类 中的变量com.chengww.qingstor_sdk_android.db.ColumnEntity
+
 
+
com.chengww.qingstor_sdk_android - 程序包 com.chengww.qingstor_sdk_android
+
 
+
com.chengww.qingstor_sdk_android.db - 程序包 com.chengww.qingstor_sdk_android.db
+
 
+
com.chengww.qingstor_sdk_android.exception - 程序包 com.chengww.qingstor_sdk_android.exception
+
 
+
com.chengww.qingstor_sdk_android.listener - 程序包 com.chengww.qingstor_sdk_android.listener
+
 
+
com.chengww.qingstor_sdk_android.recorder - 程序包 com.chengww.qingstor_sdk_android.recorder
+
 
+
com.chengww.qingstor_sdk_android.task - 程序包 com.chengww.qingstor_sdk_android.task
+
 
+
com.chengww.qingstor_sdk_android.utils - 程序包 com.chengww.qingstor_sdk_android.utils
+
 
+
com.qingstor.sdk.annotation - 程序包 com.qingstor.sdk.annotation
+
 
+
com.qingstor.sdk.client - 程序包 com.qingstor.sdk.client
+
 
+
com.qingstor.sdk.config - 程序包 com.qingstor.sdk.config
+
 
+
com.qingstor.sdk.constants - 程序包 com.qingstor.sdk.constants
+
 
+
com.qingstor.sdk.exception - 程序包 com.qingstor.sdk.exception
+
 
+
com.qingstor.sdk.model - 程序包 com.qingstor.sdk.model
+
 
+
com.qingstor.sdk.request - 程序包 com.qingstor.sdk.request
+
 
+
com.qingstor.sdk.request.impl - 程序包 com.qingstor.sdk.request.impl
+
 
+
com.qingstor.sdk.service - 程序包 com.qingstor.sdk.service
+
 
+
com.qingstor.sdk.upload - 程序包 com.qingstor.sdk.upload
+
 
+
com.qingstor.sdk.upload.impl - 程序包 com.qingstor.sdk.upload.impl
+
 
+
com.qingstor.sdk.utils - 程序包 com.qingstor.sdk.utils
+
 
+
compareTo(Object) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
compareTo(Object) - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityRunnable
+
 
+
compareTo(Object) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
completeMultipartUpload(String, Bucket.CompleteMultipartUploadInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
completeMultipartUploadAsync(String, Bucket.CompleteMultipartUploadInput, ResponseCallBack<Bucket.CompleteMultipartUploadOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
completeMultipartUploadAsyncRequest(String, Bucket.CompleteMultipartUploadInput, ResponseCallBack<Bucket.CompleteMultipartUploadOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
CompleteMultipartUploadInput() - 类 的构造器com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
CompleteMultipartUploadInput(String, int, int) - 类 的构造器com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
+
The constructor will auto set values of upload id and body input.
+
+
CompleteMultipartUploadInput(String, int, int) - 类 的构造器com.qingstor.sdk.upload.UploadManager.CompleteMultipartUploadInput
+
 
+
CompleteMultipartUploadOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.CompleteMultipartUploadOutput
+
 
+
completeMultipartUploadRequest(String, Bucket.CompleteMultipartUploadInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
compositePrimaryKey - 类 中的变量com.chengww.qingstor_sdk_android.db.ColumnEntity
+
 
+
ConditionModel() - 类 的构造器com.qingstor.sdk.service.Types.ConditionModel
+
 
+
contains(Object) - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
CONTENT_TYPE_TEXT - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
contentLength() - 类 中的方法com.qingstor.sdk.request.impl.EmptyRequestBody
+
 
+
contentLength() - 类 中的方法com.qingstor.sdk.request.impl.MultiFileuploadRequestBody
+
 
+
contentType() - 类 中的方法com.qingstor.sdk.request.impl.EmptyRequestBody
+
 
+
contentType() - 类 中的方法com.qingstor.sdk.request.impl.InputStreamUploadBody
+
 
+
contentType() - 类 中的方法com.qingstor.sdk.request.impl.MultiFileuploadRequestBody
+
 
+
contentType() - 类 中的方法com.qingstor.sdk.request.impl.ProgressRequestBody
+
 
+
convertJSONObject(String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
CORSRuleModel() - 类 的构造器com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
createFolder(String) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
+
Create a folder, If the folder exists is not created.
+
+
createFolder(File) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
+
Create a folder, If the folder exists is not created.
+
+
crop(ImageProcessClient.CropParam) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
CURRENT_SIZE - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
currentSize - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
+ + + +

D

+
+
database - 类 中的变量com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
DATE - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
date - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
DBBeanRecorder - com.chengww.qingstor_sdk_android.recorder中的类
+
+
Created by chengww on 2018/12/28.
+
+
DBBeanRecorder(Progress) - 类 的构造器com.chengww.qingstor_sdk_android.recorder.DBBeanRecorder
+
 
+
DBUtils - com.chengww.qingstor_sdk_android.db中的类
+
+
Created by chengww on 2018/12/28.
+
+
DBUtils() - 类 的构造器com.chengww.qingstor_sdk_android.db.DBUtils
+
 
+
decode(String) - 类 中的静态方法com.qingstor.sdk.utils.Base64
+
+
Decodes Base64 data into octects
+
+
default_protocal - 类 中的静态变量com.qingstor.sdk.config.EnvContext
+
 
+
del(String) - 类 中的方法com.chengww.qingstor_sdk_android.recorder.DBBeanRecorder
+
 
+
del(String) - 类 中的方法com.qingstor.sdk.upload.impl.FileRecorder
+
+
Delete the progress of multi uploads.
+
+
del(String) - 接口 中的方法com.qingstor.sdk.upload.Recorder
+
+
Delete the info of progress of multi uploads.
+
+
delete(String, String[]) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
delete(SQLiteDatabase, String, String[]) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
delete(String) - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
delete(String) - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
delete() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteAll() - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
deleteAll(SQLiteDatabase) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
deleteAsync(ResponseCallBack<Bucket.DeleteBucketOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteAsyncRequest(ResponseCallBack<Bucket.DeleteBucketOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
DeleteBucketCORSOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.DeleteBucketCORSOutput
+
 
+
DeleteBucketExternalMirrorOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.DeleteBucketExternalMirrorOutput
+
 
+
DeleteBucketLifecycleOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.DeleteBucketLifecycleOutput
+
 
+
DeleteBucketNotificationOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.DeleteBucketNotificationOutput
+
 
+
DeleteBucketOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.DeleteBucketOutput
+
 
+
DeleteBucketPolicyOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.DeleteBucketPolicyOutput
+
 
+
deleteCORS() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteCORSAsync(ResponseCallBack<Bucket.DeleteBucketCORSOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteCORSAsyncRequest(ResponseCallBack<Bucket.DeleteBucketCORSOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteCORSRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteExternalMirror() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteExternalMirrorAsync(ResponseCallBack<Bucket.DeleteBucketExternalMirrorOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteExternalMirrorAsyncRequest(ResponseCallBack<Bucket.DeleteBucketExternalMirrorOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteExternalMirrorRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteLifecycle() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteLifecycleAsync(ResponseCallBack<Bucket.DeleteBucketLifecycleOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteLifecycleAsyncRequest(ResponseCallBack<Bucket.DeleteBucketLifecycleOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteLifecycleRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteList(List<Pair<String, String[]>>) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
deleteMultipleObjects(Bucket.DeleteMultipleObjectsInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteMultipleObjectsAsync(Bucket.DeleteMultipleObjectsInput, ResponseCallBack<Bucket.DeleteMultipleObjectsOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteMultipleObjectsAsyncRequest(Bucket.DeleteMultipleObjectsInput, ResponseCallBack<Bucket.DeleteMultipleObjectsOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
DeleteMultipleObjectsInput() - 类 的构造器com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsInput
+
 
+
DeleteMultipleObjectsOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsOutput
+
 
+
deleteMultipleObjectsRequest(Bucket.DeleteMultipleObjectsInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteNotification() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteNotificationAsync(ResponseCallBack<Bucket.DeleteBucketNotificationOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteNotificationAsyncRequest(ResponseCallBack<Bucket.DeleteBucketNotificationOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteNotificationRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteObject(String) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteObjectAsync(String, ResponseCallBack<Bucket.DeleteObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteObjectAsyncRequest(String, ResponseCallBack<Bucket.DeleteObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
DeleteObjectOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.DeleteObjectOutput
+
 
+
deleteObjectRequest(String) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deletePolicy() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deletePolicyAsync(ResponseCallBack<Bucket.DeleteBucketPolicyOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deletePolicyAsyncRequest(ResponseCallBack<Bucket.DeleteBucketPolicyOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deletePolicyRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
deleteRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
delFileOrFolder(String) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
+
Delete file or folder.
+
+
delFileOrFolder(File) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
+
Delete file or folder.
+
+
Downloader - com.chengww.qingstor_sdk_android.task中的类
+
+
Created by chengww on 2018/12/28.
+
+
DownloadListener - com.chengww.qingstor_sdk_android.listener中的类
+
+
Created by chengww on 2018/12/28.
+
+
DownloadListener(Object) - 类 的构造器com.chengww.qingstor_sdk_android.listener.DownloadListener
+
 
+
DownloadTask - com.chengww.qingstor_sdk_android.task中的类
+
+
Created by chengww on 2018/12/28.
+
+
DownloadTask(String, Bucket, String) - 类 的构造器com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
DownloadTask(Progress) - 类 的构造器com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
DownloadTaskManager - com.chengww.qingstor_sdk_android.db中的类
+
+
Created by chengww on 2018/12/28.
+
+
DownloadThreadPool - com.chengww.qingstor_sdk_android.task中的类
+
+
Created by chengww on 2018/12/28.
+
+
DownloadThreadPool() - 类 的构造器com.chengww.qingstor_sdk_android.task.DownloadThreadPool
+
 
+
dpi(int) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.WaterMarkParam.Builder
+
 
+
drainTo(Collection<? super E>) - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
drainTo(Collection<? super E>, int) - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
+ + + +

E

+
+
EmptyRequestBody - com.qingstor.sdk.request.impl中的类
+
 
+
EmptyRequestBody(String) - 类 的构造器com.qingstor.sdk.request.impl.EmptyRequestBody
+
 
+
encode(byte[]) - 类 中的静态方法com.qingstor.sdk.utils.Base64
+
+
Encodes hex octects into Base64
+
+
ENCODING_UTF8 - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
EnvContext - com.qingstor.sdk.config中的类
+
 
+
EnvContext(String, String) - 类 的构造器com.qingstor.sdk.config.EnvContext
+
 
+
equals(Object) - 类 中的方法com.chengww.qingstor_sdk_android.db.Progress
+
 
+
ERROR - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
EVN_CONTEXT_KEY - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
EvnContext - com.qingstor.sdk.config中的类
+
+
已过时。
+
+
EvnContext(String, String) - 类 的构造器com.qingstor.sdk.config.EvnContext
+
+
已过时。
+
exception - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
execute(Runnable) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadThreadPool
+
 
+
execute(Runnable) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadThreadPool
+
 
+
ExpirationModel() - 类 的构造器com.qingstor.sdk.service.Types.ExpirationModel
+
 
+
EXTRA1 - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
extra1 - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
extra1(Serializable) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
extra1(Serializable) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
EXTRA2 - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
extra2 - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
extra2(Serializable) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
extra2(Serializable) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
EXTRA3 - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
extra3 - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
extra3(Serializable) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
extra3(Serializable) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
+ + + +

F

+
+
FILE_INVALID(String) - 异常错误 中的静态方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
FILE_NAME - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
FILE_PATH - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
fileName - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
fileName(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
filePath - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
FileRecorder - com.qingstor.sdk.upload.impl中的类
+
+
An impl of Recorder.
+
+
FileRecorder(String) - 类 的构造器com.qingstor.sdk.upload.impl.FileRecorder
+
 
+
fillResponseCallbackModel(int, Object, OutputModel) - 类 中的静态方法com.qingstor.sdk.request.QSOkHttpRequestClient
+
 
+
FilterModel() - 类 的构造器com.qingstor.sdk.service.Types.FilterModel
+
 
+
FINISH - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
FOLDER - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
folder - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
folder(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
format(ImageProcessClient.FormatParam) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
formatGmtDate(Date) - 类 中的静态方法com.qingstor.sdk.utils.QSSignatureUtil
+
 
+
FormatParam(String) - 类 的构造器com.qingstor.sdk.client.ImageProcessClient.FormatParam
+
 
+
FRACTION - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
fraction - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
from(Progress) - 类 中的方法com.chengww.qingstor_sdk_android.db.Progress
+
 
+
+ + + +

G

+
+
generateAuthorization(String, String, String) - 类 中的静态方法com.qingstor.sdk.utils.QSServerSignatureUtil
+
+
Generate signature for request against QingStor.
+
+
generateAuthorization(String, String, String, String, Map<String, String>, Map<String, String>) - 类 中的静态方法com.qingstor.sdk.utils.QSSignatureUtil
+
+
Generate signature for request against QingStor.
+
+
generateAuthorization(String, String, String) - 类 中的静态方法com.qingstor.sdk.utils.QSSignatureUtil
+
+
Generate signature for request against QingStor.
+
+
generateQSURL(Map<String, String>, String) - 类 中的静态方法com.qingstor.sdk.utils.QSSignatureUtil
+
 
+
generateSignature(String, String) - 类 中的静态方法com.qingstor.sdk.utils.QSServerSignatureUtil
+
+
Generate signature for request against QingStor.
+
+
generateSignature(String, String, String, Map<String, String>, Map<String, String>) - 类 中的静态方法com.qingstor.sdk.utils.QSSignatureUtil
+
+
Generate signature for request against QingStor.
+
+
generateSignature(String, String) - 类 中的静态方法com.qingstor.sdk.utils.QSSignatureUtil
+
 
+
get(String) - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
get(String) - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
get(String) - 类 中的方法com.chengww.qingstor_sdk_android.recorder.DBBeanRecorder
+
 
+
get(String) - 类 中的方法com.qingstor.sdk.upload.impl.FileRecorder
+
+
Get the progress of multi uploads.
+
+
get(String) - 接口 中的方法com.qingstor.sdk.upload.Recorder
+
+
Get the info of progress of multi uploads.
+
+
getAbortIncompleteMultipartUpload() - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
getAccessControlAllowHeaders() - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
getAccessControlAllowMethods() - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
getAccessControlAllowOrigin() - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
getAccessControlExposeHeaders() - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
getAccessControlMaxAge() - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
getAccessControlRequestHeaders() - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectInput
+
 
+
getAccessControlRequestMethod() - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectInput
+
 
+
getAccessKey() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
getAccessSecret() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
getACL() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getACL() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketACLOutput
+
 
+
getACL() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketACLInput
+
 
+
getACLAsync(ResponseCallBack<Bucket.GetBucketACLOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getACLAsyncRequest(ResponseCallBack<Bucket.GetBucketACLOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getACLRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getAction() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
getAction() - 类 中的方法com.qingstor.sdk.service.Types.CloudfuncArgsModel
+
 
+
getAction() - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
getAdditionalUserAgent() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
getAll() - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
getAll() - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
getAllowedHeaders() - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
getAllowedMethods() - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
getAllowedOrigin() - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
getBodyContent(Map) - 类 中的方法com.qingstor.sdk.request.impl.QSMultiPartUploadRequestBody
+
 
+
getBodyContent(Map) - 类 中的静态方法com.qingstor.sdk.request.impl.QSNormalRequestBody
+
 
+
getBodyInput() - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
getBodyInput() - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsInput
+
 
+
getBodyInput() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketACLInput
+
 
+
getBodyInput() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketCORSInput
+
 
+
getBodyInput() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketExternalMirrorInput
+
 
+
getBodyInput() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketLifecycleInput
+
 
+
getBodyInput() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketNotificationInput
+
 
+
getBodyInput() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketPolicyInput
+
 
+
getBodyInputFile() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
+
Get the File will be updated.
+
+
getBodyInputFile() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
+
Get the File will be updated.
+
+
getBodyInputFilePart() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
+
Get the File will be updated.
+
+
getBodyInputStream() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
Get the stream will be downloaded.
+
+
getBodyInputStream() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessOutput
+
+
Get the stream will be downloaded.
+
+
getBodyInputStream() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
+
Get the body input stream.
+
+
getBodyInputStream() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
+
Get the body input stream.
+
+
getBucket(MyBucket) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
 
+
getBucket() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
getBucket() - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadOutput
+
 
+
getBucket(String, String) - 类 中的方法com.qingstor.sdk.service.QingStor
+
 
+
getBucket() - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
GetBucketACLOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.GetBucketACLOutput
+
 
+
GetBucketCORSOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.GetBucketCORSOutput
+
 
+
GetBucketExternalMirrorOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.GetBucketExternalMirrorOutput
+
 
+
GetBucketLifecycleOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.GetBucketLifecycleOutput
+
 
+
getBucketName() - 类 中的方法com.chengww.qingstor_sdk_android.db.MyBucket
+
 
+
getBucketName() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
GetBucketNotificationOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.GetBucketNotificationOutput
+
 
+
GetBucketPolicyOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.GetBucketPolicyOutput
+
 
+
getBuckets() - 类 中的方法com.qingstor.sdk.service.QingStor.ListBucketsOutput
+
 
+
GetBucketStatisticsOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
getBuilder() - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
getBytesWritten() - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
getCacheControl() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getCacheControl() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getCallBack() - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
getCallbackCode() - 类 中的方法com.qingstor.sdk.model.ResponseCallbackModel
+
 
+
getCallbackModel() - 类 中的方法com.qingstor.sdk.model.ResponseCallbackModel
+
 
+
getCancellationHandler() - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
getCancellationHandler() - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
getCloudfunc() - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
getCloudfuncArgs() - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
getCode() - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
getCode() - 类 中的方法com.qingstor.sdk.model.OutputModel
+
 
+
getCode() - 类 中的方法com.qingstor.sdk.service.Types.KeyDeleteErrorModel
+
 
+
getColumnCount() - 类 中的方法com.chengww.qingstor_sdk_android.db.TableEntity
+
 
+
getColumnIndex(String) - 类 中的方法com.chengww.qingstor_sdk_android.db.TableEntity
+
 
+
getColumnName(int) - 类 中的方法com.chengww.qingstor_sdk_android.db.TableEntity
+
 
+
getCommonPrefixes() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
getCommonPrefixes() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
getCompleteMultipartUploadContent(int, int) - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
+
You can get the json content to complete multipart uploading.
+
+
getCondition() - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
getContentDisposition() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getContentDisposition() - 类 中的方法com.qingstor.sdk.upload.UploadManager.CompleteMultipartUploadInput
+
 
+
getContentDisposition() - 类 中的方法com.qingstor.sdk.upload.UploadManager.PutObjectInput
+
 
+
getContentEncoding() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getContentEncoding() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getContentLanguage() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getContentLength() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getContentLength() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
getContentLength() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessOutput
+
 
+
getContentLength() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getContentLength() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getContentLength() - 类 中的方法com.qingstor.sdk.upload.UploadManager.CompleteMultipartUploadInput
+
 
+
getContentMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsInput
+
 
+
getContentMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getContentMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getContentRange() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getContentType() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getContentType() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
getContentType() - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
getContentType() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getContentValues(T) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
getContentValues(Progress) - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
getContentValues(Progress) - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
getContext() - 类 中的方法com.chengww.qingstor_sdk_android.QingstorHelper
+
 
+
getCORS() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getCORSAsync(ResponseCallBack<Bucket.GetBucketCORSOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getCORSAsyncRequest(ResponseCallBack<Bucket.GetBucketCORSOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getCORSRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getCORSRules() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketCORSOutput
+
 
+
getCORSRules() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketCORSInput
+
 
+
getCount() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
getCount() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartOutput
+
 
+
getCount() - 类 中的方法com.qingstor.sdk.service.QingStor.ListBucketsOutput
+
 
+
getCreated() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
getCreated() - 类 中的方法com.qingstor.sdk.service.Types.BucketModel
+
 
+
getCreated() - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
getCreated() - 类 中的方法com.qingstor.sdk.service.Types.ObjectPartModel
+
 
+
getCreated() - 类 中的方法com.qingstor.sdk.service.Types.UploadsModel
+
 
+
getCurrentPart() - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
getDays() - 类 中的方法com.qingstor.sdk.service.Types.ExpirationModel
+
 
+
getDays() - 类 中的方法com.qingstor.sdk.service.Types.TransitionModel
+
 
+
getDaysAfterInitiation() - 类 中的方法com.qingstor.sdk.service.Types.AbortIncompleteMultipartUploadModel
+
 
+
getDeleted() - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsOutput
+
 
+
getDelimiter() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
getDelimiter() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
getDelimiter() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsInput
+
 
+
getDelimiter() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
getDelivery() - 类 中的方法com.chengww.qingstor_sdk_android.QingstorHelper
+
 
+
getDownloading() - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
getEffect() - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
getEncrypted() - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
getEnvContext() - 类 中的方法com.chengww.qingstor_sdk_android.db.MyBucket
+
 
+
getErrorCode() - 异常错误 中的方法com.qingstor.sdk.exception.QSException
+
 
+
getErrorMessage() - 异常错误 中的方法com.qingstor.sdk.exception.QSException
+
 
+
getErrors() - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsOutput
+
 
+
getETag() - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
getETag() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getETag() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
getETag() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectOutput
+
 
+
getETag() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartOutput
+
 
+
getEtag() - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
getEtag() - 类 中的方法com.qingstor.sdk.service.Types.ObjectPartModel
+
 
+
getEventTypes() - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
getExecutor() - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadThreadPool
+
 
+
getExecutor() - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadThreadPool
+
 
+
getExpect() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getExpiration() - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
getExpireAuth(Map, long, RequestInputModel) - 类 中的静态方法com.qingstor.sdk.utils.QSSignatureUtil
+
 
+
getExpires() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getExpiresRequestUrl() - 类 中的方法com.qingstor.sdk.request.QSBuilder
+
 
+
getExpiresRequestUrl() - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
getExposeHeaders() - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
getExternalMirror() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getExternalMirrorAsync(ResponseCallBack<Bucket.GetBucketExternalMirrorOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getExternalMirrorAsyncRequest(ResponseCallBack<Bucket.GetBucketExternalMirrorOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getExternalMirrorRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getFileName(String) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
 
+
getFileOffset() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
+
Get the offset of the File or stream(default = -1).
+
+
getFilter() - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
getFinished() - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
getFinished() - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
getFolder() - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
getGrantee() - 类 中的方法com.qingstor.sdk.service.Types.ACLModel
+
 
+
getHasMore() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
getHelpUrl() - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
getHost() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
getI18nHint() - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
getID() - 类 中的方法com.qingstor.sdk.service.Types.GranteeModel
+
 
+
getID() - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
getID() - 类 中的方法com.qingstor.sdk.service.Types.OwnerModel
+
 
+
getID() - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
getID() - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
getIfMatch() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getIfMatch() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
getIfModifiedSince() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getIfModifiedSince() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
getIfModifiedSince() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
getIfNoneMatch() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getIfNoneMatch() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
getIfUnmodifiedSince() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getIfUnmodifiedSince() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
getImageProgressExpiredUrlRequest(long) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
getInput() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
getInstance() - 类 中的静态方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
getInstance() - 类 中的静态方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
getInstance() - 类 中的静态方法com.chengww.qingstor_sdk_android.QingstorHelper
+
 
+
getInstance() - 类 中的静态方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
getInstance() - 类 中的静态方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
getInstance() - 类 中的静态方法com.qingstor.sdk.request.QSOkHttpRequestClient
+
 
+
getIPAddress() - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
getIsNull() - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
getKey() - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadOutput
+
 
+
getKey() - 类 中的方法com.qingstor.sdk.service.Types.KeyDeleteErrorModel
+
 
+
getKey() - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
getKey() - 类 中的方法com.qingstor.sdk.service.Types.UploadsModel
+
 
+
getKeyMarker() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
getKeyPrefix() - 类 中的方法com.qingstor.sdk.service.Types.CloudfuncArgsModel
+
 
+
getKeys() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
getKeySeprate() - 类 中的方法com.qingstor.sdk.service.Types.CloudfuncArgsModel
+
 
+
getLastModified() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getLastModified() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
getLifecycle() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getLifecycleAsync(ResponseCallBack<Bucket.GetBucketLifecycleOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getLifecycleAsyncRequest(ResponseCallBack<Bucket.GetBucketLifecycleOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getLifecycleRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getLimit() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartInput
+
 
+
getLimit() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
getLimit() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
getLimit() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsInput
+
 
+
getLimit() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
getLocation() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
getLocation() - 类 中的方法com.qingstor.sdk.service.QingStor.ListBucketsInput
+
 
+
getLocation() - 类 中的方法com.qingstor.sdk.service.Types.BucketModel
+
 
+
getLog_level() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
getMapToJson(Map) - 类 中的静态方法com.qingstor.sdk.utils.QSStringUtil
+
 
+
getMarker() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
getMarker() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsInput
+
 
+
getMarker() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
getMaxAgeSeconds() - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
getMessage() - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
getMessage() - 异常错误 中的方法com.qingstor.sdk.exception.QSException
+
 
+
getMessage() - 类 中的方法com.qingstor.sdk.model.OutputModel
+
 
+
getMessage() - 异常错误 中的方法com.qingstor.sdk.request.CancellationHandler.CancellationException
+
 
+
getMessage() - 类 中的方法com.qingstor.sdk.service.Types.KeyDeleteErrorModel
+
 
+
getMimeType() - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
getModified() - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
getMyBucket(Bucket) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
 
+
getName() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
getName() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
getName() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
getName() - 类 中的方法com.qingstor.sdk.service.Types.BucketModel
+
 
+
getName() - 类 中的方法com.qingstor.sdk.service.Types.GranteeModel
+
 
+
getName() - 类 中的方法com.qingstor.sdk.service.Types.OwnerModel
+
 
+
getNextKeyMarker() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
getNextMarker() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
getNextUploadIDMarker() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
getNotification() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getNotificationAsync(ResponseCallBack<Bucket.GetBucketNotificationOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getNotificationAsyncRequest(ResponseCallBack<Bucket.GetBucketNotificationOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getNotificationRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getNotifications() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketNotificationOutput
+
 
+
getNotifications() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketNotificationInput
+
 
+
getNotifyURL() - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
getNotIPAddress() - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
getObject(String, Bucket.GetObjectInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getObjectAsync(String, Bucket.GetObjectInput, ResponseCallBack<Bucket.GetObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getObjectAsyncRequest(String, Bucket.GetObjectInput, ResponseCallBack<Bucket.GetObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getObjectAuthRequestUrl(EnvContext, String, String, String, int) - 类 中的静态方法com.qingstor.sdk.utils.QSSignatureUtil
+
 
+
GetObjectBySignatureUrl(String) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
GetObjectBySignatureUrlAsync(String, ResponseCallBack<Bucket.GetObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
GetObjectBySignatureUrlRequest(String, Bucket.GetObjectInput, long) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getObjectFilters() - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
GetObjectInput() - 类 的构造器com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getObjectName() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
GetObjectOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getObjectParts() - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
getObjectParts() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartOutput
+
 
+
getObjectRequest(String, Bucket.GetObjectInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getObjects() - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsInput
+
 
+
GetObjectSignatureUrl(String, int) - 类 中的方法com.qingstor.sdk.service.Bucket
+
+
已过时。
+
+
GetObjectSignatureUrl(String, long) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getObjectToJson(Object) - 类 中的静态方法com.qingstor.sdk.utils.QSStringUtil
+
 
+
getOrigin() - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectInput
+
 
+
getOutputModel(Class) - 类 中的静态方法com.qingstor.sdk.utils.QSParamInvokeUtil
+
 
+
getOutputModel(ResponseCallBack) - 类 中的静态方法com.qingstor.sdk.utils.QSParamInvokeUtil
+
 
+
getOwner() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketACLOutput
+
 
+
getOwner() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
getParameterRequired(String, String) - 类 中的静态方法com.qingstor.sdk.utils.QSStringUtil
+
 
+
getParameterValueNotAllowedError(String, String, String[]) - 类 中的静态方法com.qingstor.sdk.utils.QSStringUtil
+
 
+
getPartNumber() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getPartNumber() - 类 中的方法com.qingstor.sdk.service.Types.ObjectPartModel
+
 
+
getPartNumberMarker() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartInput
+
 
+
getPartSize() - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
getPermission() - 类 中的方法com.qingstor.sdk.service.Types.ACLModel
+
 
+
getPolicy() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getPolicyAsync(ResponseCallBack<Bucket.GetBucketPolicyOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getPolicyAsyncRequest(ResponseCallBack<Bucket.GetBucketPolicyOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getPolicyRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getPort() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
getPrefix() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
getPrefix() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
getPrefix() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsInput
+
 
+
getPrefix() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
getPrefix() - 类 中的方法com.qingstor.sdk.service.Types.FilterModel
+
 
+
getProgressListener() - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
getProgressListener() - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
getProtocol() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
getQsRequestBody() - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
getQuiet() - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsInput
+
 
+
getRange() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getRecorder() - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
getReferer() - 类 中的方法com.qingstor.sdk.service.Types.IsNullModel
+
 
+
getReferer() - 类 中的方法com.qingstor.sdk.service.Types.StringLikeModel
+
 
+
getReferer() - 类 中的方法com.qingstor.sdk.service.Types.StringNotLikeModel
+
 
+
getRequest(RequestBody) - 类 中的方法com.qingstor.sdk.request.QSBuilder
+
 
+
getRequest(Map, RequestInputModel, Class<? extends OutputModel>) - 类 中的方法com.qingstor.sdk.request.QSRequest
+
 
+
getRequest(Map, RequestInputModel, Class<? extends OutputModel>) - 接口 中的方法com.qingstor.sdk.request.ResourceRequest
+
 
+
getRequestAsync(Map, RequestInputModel, ResponseCallBack) - 类 中的方法com.qingstor.sdk.request.QSRequest
+
 
+
getRequestAsync(Map, RequestInputModel, ResponseCallBack) - 接口 中的方法com.qingstor.sdk.request.ResourceRequest
+
 
+
getRequestBody(String, long, String, Map<String, Object>, Map<String, Object>) - 类 中的方法com.qingstor.sdk.request.impl.QSFormRequestBody
+
 
+
getRequestBody(String, long, String, Map<String, Object>, Map<String, Object>) - 类 中的方法com.qingstor.sdk.request.impl.QSMultiPartUploadRequestBody
+
 
+
getRequestBody(String, long, String, Map<String, Object>, Map<String, Object>) - 类 中的方法com.qingstor.sdk.request.impl.QSNormalRequestBody
+
 
+
getRequestBody(QSRequestBody) - 类 中的方法com.qingstor.sdk.request.QSBuilder
+
 
+
getRequestBody() - 类 中的方法com.qingstor.sdk.request.QSBuilder
+
 
+
getRequestBody(String, long, String, Map<String, Object>, Map<String, Object>) - 接口 中的方法com.qingstor.sdk.request.QSRequestBody
+
 
+
getRequestID() - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
getRequestId() - 类 中的方法com.qingstor.sdk.model.OutputModel
+
 
+
getRequestParams(Object, String) - 类 中的静态方法com.qingstor.sdk.utils.QSParamInvokeUtil
+
 
+
getRequestUrl() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
getRequestUrlStyle() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
+
QSConstant.VIRTUAL_HOST_STYLE:
+ https://bucket-name.zone-id.qingstor.com/object-name
+ QSConstant.PATH_STYLE:
+ https://zone-id.qingstor.com/bucket-name/object-name
+
+
getResource() - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
getResourceRequest() - 类 中的静态方法com.qingstor.sdk.request.ResourceRequestFactory
+
 
+
getResponseCacheControl() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getResponseCacheControl() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
getResponseCacheControl() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
getResponseContentDisposition() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getResponseContentDisposition() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
getResponseContentDisposition() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
getResponseContentEncoding() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getResponseContentEncoding() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
getResponseContentEncoding() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
getResponseContentLanguage() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getResponseContentLanguage() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
getResponseContentLanguage() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
getResponseContentType() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getResponseContentType() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
getResponseContentType() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
getResponseExpires() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getResponseExpires() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
getResponseExpires() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
getRule() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketLifecycleOutput
+
 
+
getRule() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketLifecycleInput
+
 
+
getSafetyClient() - 类 中的方法com.qingstor.sdk.request.QSOkHttpRequestClient
+
 
+
getSaveBucket() - 类 中的方法com.qingstor.sdk.service.Types.CloudfuncArgsModel
+
 
+
getServiceName() - 异常错误 中的方法com.qingstor.sdk.exception.QSException
+
 
+
getSize() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
getSize() - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
getSize() - 类 中的方法com.qingstor.sdk.service.Types.ObjectPartModel
+
 
+
getSourceIP() - 类 中的方法com.qingstor.sdk.service.Types.IPAddressModel
+
 
+
getSourceIP() - 类 中的方法com.qingstor.sdk.service.Types.NotIPAddressModel
+
 
+
getSourceSite() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketExternalMirrorOutput
+
 
+
getSourceSite() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketExternalMirrorInput
+
 
+
getStatement() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketPolicyOutput
+
 
+
getStatement() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketPolicyInput
+
 
+
getStatistics() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getStatisticsAsync(ResponseCallBack<Bucket.GetBucketStatisticsOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getStatisticsAsyncRequest(ResponseCallBack<Bucket.GetBucketStatisticsOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getStatisticsRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
getStatueCode() - 类 中的方法com.qingstor.sdk.model.OutputModel
+
 
+
getStatus() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
getStatus() - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
getStatusCode() - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
getStorageClass() - 类 中的方法com.qingstor.sdk.service.Types.TransitionModel
+
 
+
getStringLike() - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
getStringNotLike() - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
getStringToSignature() - 类 中的方法com.qingstor.sdk.request.QSBuilder
+
 
+
getStringToSignature() - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
getStringToSignature(String, String, Map<String, String>, Map<String, String>) - 类 中的静态方法com.qingstor.sdk.utils.QSSignatureUtil
+
 
+
getTableName() - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
getTableName() - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
getTableName() - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
getTask(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
getTask(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
getTaskMap() - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
getTaskMap() - 类 中的方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
getThreadPool() - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
getThreadPool() - 类 中的方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
getTotalSize() - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
getTransition() - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
getType() - 类 中的方法com.qingstor.sdk.service.Types.GranteeModel
+
 
+
getUploadID() - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
getUploadID() - 类 中的方法com.qingstor.sdk.service.Bucket.AbortMultipartUploadInput
+
 
+
getUploadID() - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
getUploadID() - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadOutput
+
 
+
getUploadID() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartInput
+
 
+
getUploadID() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getUploadID() - 类 中的方法com.qingstor.sdk.service.Types.UploadsModel
+
 
+
getUploadIDMarker() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
getUploading() - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
getUploads() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
getUri() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
getUrl() - 类 中的方法com.qingstor.sdk.model.OutputModel
+
 
+
getURL() - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
getURL() - 类 中的方法com.qingstor.sdk.service.Types.BucketModel
+
 
+
getUser() - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
getUserAgent() - 类 中的静态方法com.qingstor.sdk.utils.QSStringUtil
+
 
+
getXQSContentCopyRange() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartOutput
+
 
+
getXQSCopyRange() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSCopySource() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSCopySource() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSCopySourceEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSCopySourceEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSCopySourceEncryptionCustomerKey() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSCopySourceEncryptionCustomerKey() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSCopySourceEncryptionCustomerKeyMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSCopySourceEncryptionCustomerKeyMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSCopySourceIfMatch() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSCopySourceIfMatch() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSCopySourceIfModifiedSince() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSCopySourceIfModifiedSince() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSCopySourceIfNoneMatch() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSCopySourceIfNoneMatch() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSCopySourceIfUnmodifiedSince() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSCopySourceIfUnmodifiedSince() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadOutput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadOutput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectOutput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSEncryptionCustomerAlgorithm() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartOutput
+
 
+
getXQSEncryptionCustomerKey() - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
getXQSEncryptionCustomerKey() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getXQSEncryptionCustomerKey() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
getXQSEncryptionCustomerKey() - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
getXQSEncryptionCustomerKey() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSEncryptionCustomerKey() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSEncryptionCustomerKeyMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
getXQSEncryptionCustomerKeyMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
getXQSEncryptionCustomerKeyMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
getXQSEncryptionCustomerKeyMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
getXQSEncryptionCustomerKeyMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSEncryptionCustomerKeyMD5() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
getXQSFetchIfUnmodifiedSince() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSFetchSource() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSMoveSource() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getXQSStorageClass() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
getXQSStorageClass() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
getXQSStorageClass() - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
getXQSStorageClass() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
getZone() - 类 中的方法com.chengww.qingstor_sdk_android.db.MyBucket
+
 
+
getZone() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
GranteeModel() - 类 的构造器com.qingstor.sdk.service.Types.GranteeModel
+
 
+
gravity(int) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.CropParam.Builder
+
 
+
+ + + +

H

+
+
handleResponse(OutputModel) - 类 中的方法com.chengww.qingstor_sdk_android.QingstorHelper
+
+
Handle the response of the sdk.
+
+
hashCode() - 类 中的方法com.chengww.qingstor_sdk_android.db.Progress
+
 
+
hasTask(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
hasTask(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
head() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
headAsync(ResponseCallBack<Bucket.HeadBucketOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
headAsyncRequest(ResponseCallBack<Bucket.HeadBucketOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
HeadBucketOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.HeadBucketOutput
+
 
+
HEADER_PARAM_KEY_AUTHORIZATION - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
HEADER_PARAM_KEY_CONTENTTYPE - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
HEADER_PARAM_KEY_DATE - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
HEADER_PARAM_KEY_EXPIRES - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
HEADER_PARAM_KEY_SIGNATURE - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
headObject(String, Bucket.HeadObjectInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
headObjectAsync(String, Bucket.HeadObjectInput, ResponseCallBack<Bucket.HeadObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
headObjectAsyncRequest(String, Bucket.HeadObjectInput, ResponseCallBack<Bucket.HeadObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
HeadObjectInput() - 类 的构造器com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
HeadObjectOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
headObjectRequest(String, Bucket.HeadObjectInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
headRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
height(int) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.CropParam.Builder
+
 
+
height(int) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.ResizeParam.Builder
+
 
+
helper - 类 中的变量com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
HTTPCLIENT_CONNECTION_TIME_OUT - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
HTTPCLIENT_READ_TIME_OUT - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
HTTPCLIENT_WRITE_TIME_OUT - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
+ + + +

I

+
+
imageProcess() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
imageProcess(String, Bucket.ImageProcessInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
imageProcessAsync(String, Bucket.ImageProcessInput, ResponseCallBack<Bucket.ImageProcessOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
imageProcessAsyncRequest(ResponseCallBack<Bucket.ImageProcessOutput>) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
imageProcessAsyncRequest(String, Bucket.ImageProcessInput, ResponseCallBack<Bucket.ImageProcessOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
ImageProcessClient - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient(String, Bucket) - 类 的构造器com.qingstor.sdk.client.ImageProcessClient
+
 
+
ImageProcessClient.CropParam - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient.CropParam.Builder - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient.FormatParam - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient.ImageParam - com.qingstor.sdk.client中的接口
+
 
+
ImageProcessClient.InfoParam - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient.ResizeParam - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient.ResizeParam.Builder - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient.RotateParam - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient.WaterMarkImageParam - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient.WaterMarkImageParam.Builder - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient.WaterMarkParam - com.qingstor.sdk.client中的类
+
 
+
ImageProcessClient.WaterMarkParam.Builder - com.qingstor.sdk.client中的类
+
 
+
imageProcessExpiredUrlRequest(String, Bucket.ImageProcessInput, long) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
ImageProcessInput() - 类 的构造器com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
ImageProcessOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.ImageProcessOutput
+
 
+
imageProcessRequest(String, Bucket.ImageProcessInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
imageProgressAsync(ResponseCallBack<Bucket.ImageProcessOutput>) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
imageProgressRequest() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
info() - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
InfoParam() - 类 的构造器com.qingstor.sdk.client.ImageProcessClient.InfoParam
+
 
+
init(Application) - 类 中的方法com.chengww.qingstor_sdk_android.QingstorHelper
+
+
Must call in the Application.
+
+
initiateMultipartUpload(String, Bucket.InitiateMultipartUploadInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
initiateMultipartUploadAsync(String, Bucket.InitiateMultipartUploadInput, ResponseCallBack<Bucket.InitiateMultipartUploadOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
initiateMultipartUploadAsyncRequest(String, Bucket.InitiateMultipartUploadInput, ResponseCallBack<Bucket.InitiateMultipartUploadOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
InitiateMultipartUploadInput() - 类 的构造器com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
InitiateMultipartUploadOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.InitiateMultipartUploadOutput
+
 
+
initiateMultipartUploadRequest(String, Bucket.InitiateMultipartUploadInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
InputStreamUploadBody - com.qingstor.sdk.request.impl中的类
+
 
+
InputStreamUploadBody(String, InputStream, long) - 类 的构造器com.qingstor.sdk.request.impl.InputStreamUploadBody
+
 
+
InputStreamUploadBody(String, InputStream, long, long) - 类 的构造器com.qingstor.sdk.request.impl.InputStreamUploadBody
+
 
+
insert(T) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
insert(SQLiteDatabase, T) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
insert(List<T>) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
insert(SQLiteDatabase, List<T>) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
invokeObject2Map(Class, Object, Map) - 类 中的静态方法com.qingstor.sdk.utils.QSParamInvokeUtil
+
 
+
IO_EXCEPTION(IOException) - 异常错误 中的静态方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
IOUtils - com.chengww.qingstor_sdk_android.utils中的类
+
+
Created by chengww on 2018/12/28.
+
+
IOUtils() - 类 的构造器com.chengww.qingstor_sdk_android.utils.IOUtils
+
 
+
IPAddressModel() - 类 的构造器com.qingstor.sdk.service.Types.IPAddressModel
+
 
+
isAutoincrement - 类 中的变量com.chengww.qingstor_sdk_android.db.ColumnEntity
+
 
+
isCancelled() - 类 中的方法com.chengww.qingstor_sdk_android.task.MyCancellationHandler
+
 
+
isCancelled() - 接口 中的方法com.qingstor.sdk.request.CancellationHandler
+
+
A sign defined to cancel data or uploading
+
+
isEmpty(String) - 类 中的静态方法com.qingstor.sdk.utils.QSStringUtil
+
 
+
isFieldExists(SQLiteDatabase, String, String) - 类 中的静态方法com.chengww.qingstor_sdk_android.db.DBUtils
+
 
+
isFileComplete() - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
isNeedUpgradeTable(SQLiteDatabase, TableEntity) - 类 中的静态方法com.chengww.qingstor_sdk_android.db.DBUtils
+
 
+
isNotNull - 类 中的变量com.chengww.qingstor_sdk_android.db.ColumnEntity
+
 
+
IsNullModel() - 类 的构造器com.qingstor.sdk.service.Types.IsNullModel
+
 
+
isPrimary - 类 中的变量com.chengww.qingstor_sdk_android.db.ColumnEntity
+
 
+
isSafeOkHttp() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
isSubKey(String) - 类 中的静态方法com.qingstor.sdk.utils.QSSignatureUtil
+
 
+
isTableExists(SQLiteDatabase, String) - 类 中的静态方法com.chengww.qingstor_sdk_android.db.DBUtils
+
 
+
isUploadComplete() - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
iterator() - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
+ + + +

J

+
+
jsonFillValue2Object(String, Object) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
jsonObjFillValue2Object(JSONObject, Object) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
jsonToMap(JSONObject) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
+ + + +

K

+
+
KeyDeleteErrorModel() - 类 的构造器com.qingstor.sdk.service.Types.KeyDeleteErrorModel
+
 
+
KeyModel() - 类 的构造器com.qingstor.sdk.service.Types.KeyModel
+
 
+
+ + + +

L

+
+
left(int) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.WaterMarkImageParam.Builder
+
 
+
listBuckets(QingStor.ListBucketsInput) - 类 中的方法com.qingstor.sdk.service.QingStor
+
 
+
listBucketsAsync(QingStor.ListBucketsInput, ResponseCallBack<QingStor.ListBucketsOutput>) - 类 中的方法com.qingstor.sdk.service.QingStor
+
 
+
listBucketsAsyncRequest(QingStor.ListBucketsInput, ResponseCallBack<QingStor.ListBucketsOutput>) - 类 中的方法com.qingstor.sdk.service.QingStor
+
 
+
ListBucketsInput() - 类 的构造器com.qingstor.sdk.service.QingStor.ListBucketsInput
+
 
+
ListBucketsOutput() - 类 的构造器com.qingstor.sdk.service.QingStor.ListBucketsOutput
+
 
+
listBucketsRequest(QingStor.ListBucketsInput) - 类 中的方法com.qingstor.sdk.service.QingStor
+
 
+
listeners - 类 中的变量com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
listeners - 类 中的变量com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
listMultipart(String, Bucket.ListMultipartInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
listMultipartAsync(String, Bucket.ListMultipartInput, ResponseCallBack<Bucket.ListMultipartOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
listMultipartAsyncRequest(String, Bucket.ListMultipartInput, ResponseCallBack<Bucket.ListMultipartOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
ListMultipartInput() - 类 的构造器com.qingstor.sdk.service.Bucket.ListMultipartInput
+
 
+
ListMultipartOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.ListMultipartOutput
+
 
+
listMultipartRequest(String, Bucket.ListMultipartInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
listMultipartUploads(Bucket.ListMultipartUploadsInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
listMultipartUploadsAsync(Bucket.ListMultipartUploadsInput, ResponseCallBack<Bucket.ListMultipartUploadsOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
listMultipartUploadsAsyncRequest(Bucket.ListMultipartUploadsInput, ResponseCallBack<Bucket.ListMultipartUploadsOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
ListMultipartUploadsInput() - 类 的构造器com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
ListMultipartUploadsOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
listMultipartUploadsRequest(Bucket.ListMultipartUploadsInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
listObjects(Bucket.ListObjectsInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
listObjectsAsync(Bucket.ListObjectsInput, ResponseCallBack<Bucket.ListObjectsOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
listObjectsAsyncRequest(Bucket.ListObjectsInput, ResponseCallBack<Bucket.ListObjectsOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
ListObjectsInput() - 类 的构造器com.qingstor.sdk.service.Bucket.ListObjectsInput
+
 
+
ListObjectsOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
listObjectsRequest(Bucket.ListObjectsInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
LOADING - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
LOGGER_DEBUG - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
LOGGER_ERROR - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
LOGGER_FATAL - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
LOGGER_INFO - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
LOGGER_LEVEL - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
LOGGER_WARNNING - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
+ + + +

M

+
+
mode(int) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.ResizeParam.Builder
+
 
+
MultiFileuploadRequestBody - com.qingstor.sdk.request.impl中的类
+
 
+
MultiFileuploadRequestBody(String, RandomAccessFile, long) - 类 的构造器com.qingstor.sdk.request.impl.MultiFileuploadRequestBody
+
 
+
MyBucket - com.chengww.qingstor_sdk_android.db中的类
+
+
Created by chengww on 2019/3/4.
+
+
MyBucket(EnvContext, String, String) - 类 的构造器com.chengww.qingstor_sdk_android.db.MyBucket
+
 
+
myBucket - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
MyCancellationHandler - com.chengww.qingstor_sdk_android.task中的类
+
+
Created by chengww on 2019/3/5.
+
+
MyCancellationHandler() - 类 的构造器com.chengww.qingstor_sdk_android.task.MyCancellationHandler
+
 
+
+ + + +

N

+
+
NONE - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
NOT_AVAILABLE() - 异常错误 中的静态方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
NotificationModel() - 类 的构造器com.qingstor.sdk.service.Types.NotificationModel
+
 
+
NotIPAddressModel() - 类 的构造器com.qingstor.sdk.service.Types.NotIPAddressModel
+
 
+
+ + + +

O

+
+
obj - 类 中的变量com.chengww.qingstor_sdk_android.task.PriorityObject
+
 
+
OBJECT_KEY - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
OBJECT_NAME_REPLACE - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
objectJSONValue(Object) - 类 中的静态方法com.qingstor.sdk.utils.QSStringUtil
+
 
+
objectKey - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
ObjectPartModel() - 类 的构造器com.qingstor.sdk.service.Types.ObjectPartModel
+
 
+
objectToJson(String, Object) - 类 中的静态方法com.qingstor.sdk.utils.QSStringUtil
+
 
+
offer(E, long, TimeUnit) - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
offer(E) - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
onAllTaskEnd() - 接口 中的方法com.chengww.qingstor_sdk_android.task.XExecutor.OnAllTaskEndListener
+
 
+
onAPIResponse(String, OutputModel) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
onAPIResponse(O) - 接口 中的方法com.qingstor.sdk.request.ResponseCallBack
+
 
+
onAPIResponse(String, O) - 类 中的方法com.qingstor.sdk.upload.UploadManagerCallback
+
 
+
onError(Progress) - 接口 中的方法com.chengww.qingstor_sdk_android.listener.ProgressListener
+
 
+
onFinish(T, Progress) - 接口 中的方法com.chengww.qingstor_sdk_android.listener.ProgressListener
+
 
+
onProgress(Progress) - 接口 中的方法com.chengww.qingstor_sdk_android.listener.ProgressListener
+
 
+
onProgress(String, long, long) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
onProgress(long, long) - 接口 中的方法com.qingstor.sdk.request.BodyProgressListener
+
 
+
onProgress(String, long, long) - 接口 中的方法com.qingstor.sdk.upload.UploadProgressListener
+
 
+
onRemove(Progress) - 接口 中的方法com.chengww.qingstor_sdk_android.listener.ProgressListener
+
 
+
onStart(Progress) - 接口 中的方法com.chengww.qingstor_sdk_android.listener.ProgressListener
+
 
+
onTaskEnd(Runnable) - 接口 中的方法com.chengww.qingstor_sdk_android.task.XExecutor.OnTaskEndListener
+
 
+
opacity(double) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.WaterMarkImageParam.Builder
+
 
+
opacity(double) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.WaterMarkParam.Builder
+
 
+
openReader() - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
openWriter() - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
optionsObject(String, Bucket.OptionsObjectInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
optionsObjectAsync(String, Bucket.OptionsObjectInput, ResponseCallBack<Bucket.OptionsObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
optionsObjectAsyncRequest(String, Bucket.OptionsObjectInput, ResponseCallBack<Bucket.OptionsObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
OptionsObjectInput() - 类 的构造器com.qingstor.sdk.service.Bucket.OptionsObjectInput
+
 
+
OptionsObjectOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
optionsObjectRequest(String, Bucket.OptionsObjectInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
OutputModel - com.qingstor.sdk.model中的类
+
 
+
OutputModel() - 类 的构造器com.qingstor.sdk.model.OutputModel
+
 
+
OwnerModel() - 类 的构造器com.qingstor.sdk.service.Types.OwnerModel
+
 
+
+ + + +

P

+
+
PARAM_KEY_BUCKET_NAME - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_CONTENT_LENGTH - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_CONTENT_MD5 - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_EXPIRES - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_FILE_OFFSET - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_OBJECT_NAME - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_PART_NUMBER - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_REQUEST_API_DELETE_MULTIPART - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_REQUEST_API_MULTIPART - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_REQUEST_APINAME - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_REQUEST_METHOD - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_REQUEST_PATH - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_REQUEST_ZONE - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_KEY_USER_AGENT - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_TYPE_BODY - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_TYPE_BODYINPUTFILE - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_TYPE_BODYINPUTSTREAM - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_TYPE_BODYINPUTSTRING - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_TYPE_FORM_DATA - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_TYPE_HEADER - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PARAM_TYPE_QUERY - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
ParamAnnotation - com.qingstor.sdk.annotation中的注释类型
+
 
+
ParamValidate - com.qingstor.sdk.request中的接口
+
 
+
parseCursorToBean(Cursor) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
parseCursorToBean(Cursor) - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
parseCursorToBean(Cursor) - 类 中的静态方法com.chengww.qingstor_sdk_android.db.Progress
+
 
+
parseCursorToBean(Cursor) - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
PATH_STYLE - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
PAUSE - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
pause() - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
+
暂停的方法
+
+
pause() - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
pauseAll() - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
+
暂停全部任务
+
+
pauseAll() - 类 中的方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
peek() - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
percentEncode(String, String) - 类 中的静态方法com.qingstor.sdk.utils.QSStringUtil
+
 
+
poll(long, TimeUnit) - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
poll() - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
priority - 类 中的变量com.chengww.qingstor_sdk_android.task.PriorityObject
+
 
+
PriorityBlockingQueue<E> - com.chengww.qingstor_sdk_android.task中的类
+
+
Created by chengww on 2019/3/4.
+
+
PriorityBlockingQueue() - 类 的构造器com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
PriorityBlockingQueue(int) - 类 的构造器com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
PriorityBlockingQueue(Collection<? extends E>) - 类 的构造器com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
PriorityObject<E> - com.chengww.qingstor_sdk_android.task中的类
+
+
Created by chengww on 2019/3/4.
+
+
PriorityObject(int, E) - 类 的构造器com.chengww.qingstor_sdk_android.task.PriorityObject
+
 
+
PriorityRunnable - com.chengww.qingstor_sdk_android.task中的类
+
+
Created by chengww on 2019/3/4.
+
+
PriorityRunnable(Runnable) - 类 的构造器com.chengww.qingstor_sdk_android.task.PriorityRunnable
+
 
+
Progress - com.chengww.qingstor_sdk_android.db中的类
+
 
+
Progress() - 类 的构造器com.chengww.qingstor_sdk_android.db.Progress
+
 
+
progress - 类 中的变量com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
progress - 类 中的变量com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
Progress.Action - com.chengww.qingstor_sdk_android.db中的接口
+
 
+
ProgressListener<T> - com.chengww.qingstor_sdk_android.listener中的接口
+
+
Created by chengww on 2018/12/28.
+
+
ProgressRequestBody - com.qingstor.sdk.request.impl中的类
+
 
+
ProgressRequestBody(RequestBody, BodyProgressListener, CancellationHandler) - 类 的构造器com.qingstor.sdk.request.impl.ProgressRequestBody
+
 
+
put(E) - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
put() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
put(File) - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
+
Upload a file with a sync request.
+
+
put(File, String, String, String) - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
+
Upload a file with a sync request.
+
+
putACL(Bucket.PutBucketACLInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putACLAsync(Bucket.PutBucketACLInput, ResponseCallBack<Bucket.PutBucketACLOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putACLAsyncRequest(Bucket.PutBucketACLInput, ResponseCallBack<Bucket.PutBucketACLOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putACLRequest(Bucket.PutBucketACLInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putAsync(ResponseCallBack<Bucket.PutBucketOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putAsyncRequest(ResponseCallBack<Bucket.PutBucketOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
PutBucketACLInput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketACLInput
+
 
+
PutBucketACLOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketACLOutput
+
 
+
PutBucketCORSInput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketCORSInput
+
 
+
PutBucketCORSOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketCORSOutput
+
 
+
PutBucketExternalMirrorInput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketExternalMirrorInput
+
 
+
PutBucketExternalMirrorOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketExternalMirrorOutput
+
 
+
PutBucketLifecycleInput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketLifecycleInput
+
 
+
PutBucketLifecycleOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketLifecycleOutput
+
 
+
PutBucketNotificationInput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketNotificationInput
+
 
+
PutBucketNotificationOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketNotificationOutput
+
 
+
PutBucketOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketOutput
+
 
+
PutBucketPolicyInput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketPolicyInput
+
 
+
PutBucketPolicyOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutBucketPolicyOutput
+
 
+
putCORS(Bucket.PutBucketCORSInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putCORSAsync(Bucket.PutBucketCORSInput, ResponseCallBack<Bucket.PutBucketCORSOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putCORSAsyncRequest(Bucket.PutBucketCORSInput, ResponseCallBack<Bucket.PutBucketCORSOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putCORSRequest(Bucket.PutBucketCORSInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putExternalMirror(Bucket.PutBucketExternalMirrorInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putExternalMirrorAsync(Bucket.PutBucketExternalMirrorInput, ResponseCallBack<Bucket.PutBucketExternalMirrorOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putExternalMirrorAsyncRequest(Bucket.PutBucketExternalMirrorInput, ResponseCallBack<Bucket.PutBucketExternalMirrorOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putExternalMirrorRequest(Bucket.PutBucketExternalMirrorInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putFile(File, String, String, long) - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
+
Upload a file with a simple put object upload as a sync request.
+
+
putFileMulti(File, String, String, String, long) - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
+
Upload a file with a multi upload as a sync request.
+
+
putJsonData(JSONObject, String, Object) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
putJsonData(JSONArray, int, Object) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
putLifecycle(Bucket.PutBucketLifecycleInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putLifecycleAsync(Bucket.PutBucketLifecycleInput, ResponseCallBack<Bucket.PutBucketLifecycleOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putLifecycleAsyncRequest(Bucket.PutBucketLifecycleInput, ResponseCallBack<Bucket.PutBucketLifecycleOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putLifecycleRequest(Bucket.PutBucketLifecycleInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putNotification(Bucket.PutBucketNotificationInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putNotificationAsync(Bucket.PutBucketNotificationInput, ResponseCallBack<Bucket.PutBucketNotificationOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putNotificationAsyncRequest(Bucket.PutBucketNotificationInput, ResponseCallBack<Bucket.PutBucketNotificationOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putNotificationRequest(Bucket.PutBucketNotificationInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putObject(String, Bucket.PutObjectInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putObjectAsync(String, Bucket.PutObjectInput, ResponseCallBack<Bucket.PutObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putObjectAsyncRequest(String, Bucket.PutObjectInput, ResponseCallBack<Bucket.PutObjectOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
PutObjectInput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
PutObjectInput() - 类 的构造器com.qingstor.sdk.upload.UploadManager.PutObjectInput
+
 
+
PutObjectOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.PutObjectOutput
+
 
+
putObjectRequest(String, Bucket.PutObjectInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putPolicy(Bucket.PutBucketPolicyInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putPolicyAsync(Bucket.PutBucketPolicyInput, ResponseCallBack<Bucket.PutBucketPolicyOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putPolicyAsyncRequest(Bucket.PutBucketPolicyInput, ResponseCallBack<Bucket.PutBucketPolicyOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putPolicyRequest(Bucket.PutBucketPolicyInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
putRequest() - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
+ + + +

Q

+
+
QC_CODE_FIELD_NAME - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
QC_MESSAGE_FIELD_NAME - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
qingcloudStorHost - 类 中的静态变量com.qingstor.sdk.config.EnvContext
+
 
+
QingStor - com.qingstor.sdk.service中的类
+
 
+
QingStor(EnvContext, String) - 类 的构造器com.qingstor.sdk.service.QingStor
+
 
+
QingStor(EnvContext) - 类 的构造器com.qingstor.sdk.service.QingStor
+
 
+
QingStor.ListBucketsInput - com.qingstor.sdk.service中的类
+
+
ListBucketsInput: an input stream of the bucket.
+
+
QingStor.ListBucketsOutput - com.qingstor.sdk.service中的类
+
+
ListBucketsOutput: an output stream of the bucket.
+
+
QingstorHelper - com.chengww.qingstor_sdk_android中的类
+
+
Created by chengww on 2018/12/25.
+
+
QSBuilder - com.qingstor.sdk.request中的类
+
 
+
QSBuilder(Map, RequestInputModel) - 类 的构造器com.qingstor.sdk.request.QSBuilder
+
 
+
QSConstant - com.qingstor.sdk.constants中的类
+
 
+
QSConstant() - 类 的构造器com.qingstor.sdk.constants.QSConstant
+
 
+
QSException - com.qingstor.sdk.exception中的异常错误
+
 
+
QSException(String, Throwable) - 异常错误 的构造器com.qingstor.sdk.exception.QSException
+
 
+
QSException(String) - 异常错误 的构造器com.qingstor.sdk.exception.QSException
+
 
+
QSFormRequestBody - com.qingstor.sdk.request.impl中的类
+
 
+
QSFormRequestBody() - 类 的构造器com.qingstor.sdk.request.impl.QSFormRequestBody
+
 
+
QSJSONUtil - com.qingstor.sdk.utils中的类
+
 
+
QSJSONUtil() - 类 的构造器com.qingstor.sdk.utils.QSJSONUtil
+
 
+
QSLoggerUtil - com.qingstor.sdk.utils中的类
+
 
+
QSLoggerUtil() - 类 的构造器com.qingstor.sdk.utils.QSLoggerUtil
+
 
+
QSMultiPartUploadRequestBody - com.qingstor.sdk.request.impl中的类
+
 
+
QSMultiPartUploadRequestBody() - 类 的构造器com.qingstor.sdk.request.impl.QSMultiPartUploadRequestBody
+
 
+
QSNormalRequestBody - com.qingstor.sdk.request.impl中的类
+
 
+
QSNormalRequestBody() - 类 的构造器com.qingstor.sdk.request.impl.QSNormalRequestBody
+
 
+
QSOkHttpRequestClient - com.qingstor.sdk.request中的类
+
 
+
QSOkHttpRequestClient() - 类 的构造器com.qingstor.sdk.request.QSOkHttpRequestClient
+
 
+
QSParamInvokeUtil - com.qingstor.sdk.utils中的类
+
 
+
QSParamInvokeUtil() - 类 的构造器com.qingstor.sdk.utils.QSParamInvokeUtil
+
 
+
QSRequest - com.qingstor.sdk.request中的类
+
 
+
QSRequest() - 类 的构造器com.qingstor.sdk.request.QSRequest
+
 
+
QSRequestBody - com.qingstor.sdk.request中的接口
+
 
+
QSServerSignatureUtil - com.qingstor.sdk.utils中的类
+
 
+
QSServerSignatureUtil() - 类 的构造器com.qingstor.sdk.utils.QSServerSignatureUtil
+
 
+
QSSignatureUtil - com.qingstor.sdk.utils中的类
+
 
+
QSSignatureUtil() - 类 的构造器com.qingstor.sdk.utils.QSSignatureUtil
+
 
+
QSStringUtil - com.qingstor.sdk.utils中的类
+
+
Created by on 11/4/15.
+
+
QSStringUtil() - 类 的构造器com.qingstor.sdk.utils.QSStringUtil
+
 
+
query(SQLiteDatabase, String, String[]) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
query(SQLiteDatabase, String[], String, String[], String, String, String, String) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
query(String, String[]) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
query(String[], String, String[], String, String, String, String) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
queryAll(SQLiteDatabase) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
queryAll() - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
queryOne(SQLiteDatabase, String, String[]) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
queryOne(String, String[]) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
+ + + +

R

+
+
Recorder - com.qingstor.sdk.upload中的接口
+
+
A interface defined to make records when multi uploads.
+
+
RECORDER_BEAN - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
recorderBean - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
REFRESH_TIME - 类 中的静态变量com.chengww.qingstor_sdk_android.QingstorHelper
+
 
+
register(DownloadListener) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
register(UploadListener<String>) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
remainingCapacity() - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
remove() - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
+
删除一个任务,会删除下载文件
+
+
remove(boolean) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
+
删除一个任务,会删除下载文件
+
+
remove(Runnable) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadThreadPool
+
 
+
remove(Object) - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
remove() - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
remove(Runnable) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadThreadPool
+
 
+
removeAll() - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
removeAll(boolean) - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
+
Delete all tasks + 删除所有任务
+
+
removeAll() - 类 中的方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
removeOnAllTaskEndListener(XExecutor.OnAllTaskEndListener) - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
removeOnAllTaskEndListener(XExecutor.OnAllTaskEndListener) - 类 中的方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
removeOnAllTaskEndListener(XExecutor.OnAllTaskEndListener) - 类 中的方法com.chengww.qingstor_sdk_android.task.XExecutor
+
 
+
removeOnTaskEndListener(XExecutor.OnTaskEndListener) - 类 中的方法com.chengww.qingstor_sdk_android.task.XExecutor
+
 
+
removeTask(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
removeTask(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
replace(T) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
replace(SQLiteDatabase, T) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
replace(ContentValues) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
replace(SQLiteDatabase, ContentValues) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
replace(List<T>) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
replace(SQLiteDatabase, List<T>) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
request(String, Bucket, String) - 类 中的静态方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
request(String, Bucket, String, String) - 类 中的静态方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
REQUEST_ERROR_CANCELLED - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
REQUEST_ERROR_CODE - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
requestAction(Request, boolean, Class) - 类 中的方法com.qingstor.sdk.request.QSOkHttpRequestClient
+
 
+
requestActionAsync(Request, boolean, ResponseCallBack) - 类 中的方法com.qingstor.sdk.request.QSOkHttpRequestClient
+
 
+
RequestHandler - com.qingstor.sdk.request中的类
+
 
+
RequestHandler(Map, RequestInputModel, Class) - 类 的构造器com.qingstor.sdk.request.RequestHandler
+
 
+
RequestHandler(Map, RequestInputModel, ResponseCallBack) - 类 的构造器com.qingstor.sdk.request.RequestHandler
+
 
+
RequestInputModel - com.qingstor.sdk.model中的类
+
 
+
RequestInputModel() - 类 的构造器com.qingstor.sdk.model.RequestInputModel
+
 
+
resize(ImageProcessClient.ResizeParam) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
ResourceRequest - com.qingstor.sdk.request中的接口
+
 
+
ResourceRequestFactory - com.qingstor.sdk.request中的类
+
 
+
ResourceRequestFactory() - 类 的构造器com.qingstor.sdk.request.ResourceRequestFactory
+
 
+
responceFillValue2Object(okhttp3.Response, Object) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
ResponseCallBack<O extends OutputModel> - com.qingstor.sdk.request中的接口
+
 
+
ResponseCallbackModel - com.qingstor.sdk.model中的类
+
 
+
ResponseCallbackModel() - 类 的构造器com.qingstor.sdk.model.ResponseCallbackModel
+
 
+
restart() - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
restart() - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
restore(Progress) - 类 中的静态方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
restore(List<Progress>) - 类 中的静态方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
restore(Progress) - 类 中的静态方法com.chengww.qingstor_sdk_android.task.Uploader
+
+
Restore tasks form database 从数据库中恢复任务
+
+
restore(List<Progress>) - 类 中的静态方法com.chengww.qingstor_sdk_android.task.Uploader
+
+
Restore tasks form database 从数据库中恢复任务
+
+
ResUtils - com.chengww.qingstor_sdk_android.utils中的类
+
+
Created by chengww on 2018/12/28.
+
+
ResUtils() - 类 的构造器com.chengww.qingstor_sdk_android.utils.ResUtils
+
 
+
rotate(ImageProcessClient.RotateParam) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
RotateParam(int) - 类 的构造器com.qingstor.sdk.client.ImageProcessClient.RotateParam
+
 
+
RuleModel() - 类 的构造器com.qingstor.sdk.service.Types.RuleModel
+
 
+
run() - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
run() - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityRunnable
+
 
+
run() - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
runOnUiThread(Runnable) - 类 中的方法com.chengww.qingstor_sdk_android.QingstorHelper
+
 
+
+ + + +

S

+
+
save() - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
save() - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
SDK_NAME - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
SDK_TYPE_IAAS - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
SDK_TYPE_STOR - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
SDK_VERSION - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
send() - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
sendApiRequest(String, Map, Class<? extends OutputModel>) - 类 中的方法com.qingstor.sdk.request.QSRequest
+
 
+
sendApiRequest(Map, RequestInputModel, Class) - 类 中的方法com.qingstor.sdk.request.QSRequest
+
+
已过时。
+
+
sendApiRequest(Map, RequestInputModel, Class<? extends OutputModel>) - 接口 中的方法com.qingstor.sdk.request.ResourceRequest
+
 
+
sendApiRequest(String, Map, Class<? extends OutputModel>) - 接口 中的方法com.qingstor.sdk.request.ResourceRequest
+
 
+
sendApiRequestAsync(Map, RequestInputModel, ResponseCallBack) - 类 中的方法com.qingstor.sdk.request.QSRequest
+
 
+
sendApiRequestAsync(String, Map, ResponseCallBack) - 类 中的方法com.qingstor.sdk.request.QSRequest
+
 
+
sendApiRequestAsync(Map, RequestInputModel, ResponseCallBack) - 接口 中的方法com.qingstor.sdk.request.ResourceRequest
+
 
+
sendApiRequestAsync(String, Map, ResponseCallBack) - 接口 中的方法com.qingstor.sdk.request.ResourceRequest
+
 
+
sendAsync() - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
serializeParams(Map) - 类 中的静态方法com.qingstor.sdk.utils.QSParamInvokeUtil
+
 
+
set(String, byte[]) - 类 中的方法com.chengww.qingstor_sdk_android.recorder.DBBeanRecorder
+
 
+
set(String, byte[]) - 类 中的方法com.qingstor.sdk.upload.impl.FileRecorder
+
+
A recorder who records progress of multi uploads.
+
+
set(String, byte[]) - 接口 中的方法com.qingstor.sdk.upload.Recorder
+
+
Set a new or updated progress of multi uploads.
+
+
setAbortIncompleteMultipartUpload(Types.AbortIncompleteMultipartUploadModel) - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
setAccessControlAllowHeaders(String) - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
setAccessControlAllowMethods(String) - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
setAccessControlAllowOrigin(String) - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
setAccessControlExposeHeaders(String) - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
setAccessControlMaxAge(String) - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectOutput
+
 
+
setAccessControlRequestHeaders(String) - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectInput
+
 
+
setAccessControlRequestMethod(String) - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectInput
+
 
+
setAccessKey(String) - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
setAccessSecret(String) - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
setACL(List<Types.ACLModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketACLOutput
+
 
+
setACL(List<Types.ACLModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketACLInput
+
 
+
setAction(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
setAction(String) - 类 中的方法com.qingstor.sdk.service.Types.CloudfuncArgsModel
+
 
+
setAction(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
setAdditionalUserAgent(String) - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
setAllowedHeaders(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
setAllowedMethods(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
setAllowedOrigin(String) - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
setBodyInput(String) - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
setBodyInput(String) - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsInput
+
 
+
setBodyInput(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketACLInput
+
 
+
setBodyInput(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketCORSInput
+
 
+
setBodyInput(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketExternalMirrorInput
+
 
+
setBodyInput(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketLifecycleInput
+
 
+
setBodyInput(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketNotificationInput
+
 
+
setBodyInput(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketPolicyInput
+
 
+
setBodyInputFile(File) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
+
Set the File to update.
+
+
setBodyInputFile(File) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
+
已过时。
+
+
setBodyInputFilePart(File) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
+
Set the File parts to update.
+
+
setBodyInputStream(InputStream) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
Set the stream to download.
+
+
setBodyInputStream(InputStream) - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessOutput
+
+
Set the stream to download.
+
+
setBodyInputStream(InputStream) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
+
Set the body input stream.
+
+
setBodyInputStream(InputStream) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
+
Set the body input stream.
+
+
setBucket(Bucket) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
setBucket(String) - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadOutput
+
 
+
setBucket(Bucket) - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
setBucketName(String) - 类 中的方法com.chengww.qingstor_sdk_android.db.MyBucket
+
 
+
setBuckets(List<Types.BucketModel>) - 类 中的方法com.qingstor.sdk.service.QingStor.ListBucketsOutput
+
 
+
setBytesWritten(long) - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
setCacheControl(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setCacheControl(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setCallBack(UploadManagerCallback) - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
setCallbackCode(int) - 类 中的方法com.qingstor.sdk.model.ResponseCallbackModel
+
 
+
setCallbackModel(OutputModel) - 类 中的方法com.qingstor.sdk.model.ResponseCallbackModel
+
 
+
setCancellationHandler(CancellationHandler) - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
setCancellationHandler(CancellationHandler) - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
setCloudfunc(String) - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
setCloudfuncArgs(Types.CloudfuncArgsModel) - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
setCode(String) - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
setCode(String) - 类 中的方法com.qingstor.sdk.model.OutputModel
+
 
+
setCode(String) - 类 中的方法com.qingstor.sdk.service.Types.KeyDeleteErrorModel
+
 
+
setCommonPrefixes(List<String>) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
setCommonPrefixes(List<String>) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
setCondition(Types.ConditionModel) - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
setContentDisposition(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setContentDisposition(String) - 类 中的方法com.qingstor.sdk.upload.UploadManager.CompleteMultipartUploadInput
+
 
+
setContentDisposition(String) - 类 中的方法com.qingstor.sdk.upload.UploadManager.PutObjectInput
+
 
+
setContentEncoding(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setContentEncoding(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setContentLanguage(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setContentLength(Long) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setContentLength(Long) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
setContentLength(Long) - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessOutput
+
 
+
setContentLength(Long) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setContentLength(Long) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setContentLength(Long) - 类 中的方法com.qingstor.sdk.upload.UploadManager.CompleteMultipartUploadInput
+
 
+
setContentMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsInput
+
 
+
setContentMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setContentMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setContentRange(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setContentType(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setContentType(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
setContentType(String) - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
setContentType(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setCorePoolSize(int) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadThreadPool
+
+
Must set this before first execute. corePoolSize = 1 - 5
+
+
setCorePoolSize(int) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadThreadPool
+
+
Must set this before first execute. corePoolSize = 1 - 5
+
+
setCORSRules(List<Types.CORSRuleModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketCORSOutput
+
 
+
setCORSRules(List<Types.CORSRuleModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketCORSInput
+
 
+
setCount(Long) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
setCount(Integer) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartOutput
+
 
+
setCount(Integer) - 类 中的方法com.qingstor.sdk.service.QingStor.ListBucketsOutput
+
 
+
setCreated(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
setCreated(String) - 类 中的方法com.qingstor.sdk.service.Types.BucketModel
+
 
+
setCreated(String) - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
setCreated(String) - 类 中的方法com.qingstor.sdk.service.Types.ObjectPartModel
+
 
+
setCreated(String) - 类 中的方法com.qingstor.sdk.service.Types.UploadsModel
+
 
+
setCurrentPart(int) - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
setDays(Integer) - 类 中的方法com.qingstor.sdk.service.Types.ExpirationModel
+
 
+
setDays(Integer) - 类 中的方法com.qingstor.sdk.service.Types.TransitionModel
+
 
+
setDaysAfterInitiation(Integer) - 类 中的方法com.qingstor.sdk.service.Types.AbortIncompleteMultipartUploadModel
+
 
+
setDeleted(List<Types.KeyModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsOutput
+
 
+
setDelimiter(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
setDelimiter(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
setDelimiter(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsInput
+
 
+
setDelimiter(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
setEffect(String) - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
setEncrypted(Boolean) - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
setEnvContext(EnvContext) - 类 中的方法com.chengww.qingstor_sdk_android.db.MyBucket
+
 
+
setErrorCode(int) - 异常错误 中的方法com.qingstor.sdk.exception.QSException
+
 
+
setErrorMessage(String) - 异常错误 中的方法com.qingstor.sdk.exception.QSException
+
 
+
setErrors(List<Types.KeyDeleteErrorModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsOutput
+
 
+
setETag(String) - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
setETag(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setETag(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
setETag(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectOutput
+
 
+
setETag(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartOutput
+
 
+
setEtag(String) - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
setEtag(String) - 类 中的方法com.qingstor.sdk.service.Types.ObjectPartModel
+
 
+
setEventTypes(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
setExpect(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setExpiration(Types.ExpirationModel) - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
setExpires(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setExposeHeaders(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
setFileComplete(boolean) - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
setFileOffset(Long) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
+
You can set the offset of a file here.
+
+
setFilter(Types.FilterModel) - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
setFolder(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
setGrantee(Types.GranteeModel) - 类 中的方法com.qingstor.sdk.service.Types.ACLModel
+
 
+
setHasMore(Boolean) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
setHeader(String, String) - 类 中的方法com.qingstor.sdk.request.QSBuilder
+
 
+
setHelpUrl(String) - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
setHost(String) - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
setI18nHint(String) - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
setID(String) - 类 中的方法com.qingstor.sdk.service.Types.GranteeModel
+
 
+
setID(String) - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
setID(String) - 类 中的方法com.qingstor.sdk.service.Types.OwnerModel
+
 
+
setID(String) - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
setID(String) - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
setIfMatch(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setIfMatch(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
setIfModifiedSince(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setIfModifiedSince(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
setIfModifiedSince(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
setIfNoneMatch(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setIfNoneMatch(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
setIfUnmodifiedSince(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setIfUnmodifiedSince(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
setInput(Bucket.ImageProcessInput) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
setIPAddress(Types.IPAddressModel) - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
setIsNull(Types.IsNullModel) - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
setKey(String) - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadOutput
+
 
+
setKey(String) - 类 中的方法com.qingstor.sdk.service.Types.KeyDeleteErrorModel
+
 
+
setKey(String) - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
setKey(String) - 类 中的方法com.qingstor.sdk.service.Types.UploadsModel
+
 
+
setKeyMarker(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
setKeyPrefix(String) - 类 中的方法com.qingstor.sdk.service.Types.CloudfuncArgsModel
+
 
+
setKeys(List<Types.KeyModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
setKeySeprate(String) - 类 中的方法com.qingstor.sdk.service.Types.CloudfuncArgsModel
+
 
+
setLastModified(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setLastModified(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
setLimit(Integer) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartInput
+
 
+
setLimit(Integer) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
setLimit(Integer) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
setLimit(Integer) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsInput
+
 
+
setLimit(Integer) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
setLocation(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
setLocation(String) - 类 中的方法com.qingstor.sdk.service.QingStor.ListBucketsInput
+
 
+
setLocation(String) - 类 中的方法com.qingstor.sdk.service.Types.BucketModel
+
 
+
setLog_level(String) - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
setLoggerHanlder(String) - 类 中的静态方法com.qingstor.sdk.utils.QSLoggerUtil
+
 
+
setMarker(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
setMarker(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsInput
+
 
+
setMarker(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
setMaxAgeSeconds(Integer) - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
setMessage(String) - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
setMessage(String) - 类 中的方法com.qingstor.sdk.model.OutputModel
+
 
+
setMessage(String) - 类 中的方法com.qingstor.sdk.service.Types.KeyDeleteErrorModel
+
 
+
setMimeType(String) - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
setModified(Integer) - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
setName(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
setName(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
setName(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
setName(String) - 类 中的方法com.qingstor.sdk.service.Types.BucketModel
+
 
+
setName(String) - 类 中的方法com.qingstor.sdk.service.Types.GranteeModel
+
 
+
setName(String) - 类 中的方法com.qingstor.sdk.service.Types.OwnerModel
+
 
+
setNextKeyMarker(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
setNextMarker(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
setNextUploadIDMarker(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
setNotifications(List<Types.NotificationModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketNotificationOutput
+
 
+
setNotifications(List<Types.NotificationModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketNotificationInput
+
 
+
setNotifyURL(String) - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
setNotIPAddress(Types.NotIPAddressModel) - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
setObjectFilters(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
setObjectName(String) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
setObjectParts(List<Types.ObjectPartModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
setObjectParts(List<Types.ObjectPartModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartOutput
+
 
+
setObjects(List<Types.KeyModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsInput
+
 
+
setOrigin(String) - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectInput
+
 
+
setOwner(Types.OwnerModel) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketACLOutput
+
 
+
setOwner(Types.OwnerModel) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
setPartNumber(Integer) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setPartNumber(Integer) - 类 中的方法com.qingstor.sdk.service.Types.ObjectPartModel
+
 
+
setPartNumberMarker(Integer) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartInput
+
 
+
setPartSize(long) - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
setPaused(boolean) - 类 中的方法com.chengww.qingstor_sdk_android.task.MyCancellationHandler
+
 
+
setPermission(String) - 类 中的方法com.qingstor.sdk.service.Types.ACLModel
+
 
+
setPort(String) - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
setPrefix(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
setPrefix(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
setPrefix(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsInput
+
 
+
setPrefix(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsOutput
+
 
+
setPrefix(String) - 类 中的方法com.qingstor.sdk.service.Types.FilterModel
+
 
+
setProgressListener(BodyProgressListener) - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
setProgressListener(UploadProgressListener) - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
setProtocol(String) - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
setQsRequestBody(QSRequestBody) - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
setQuiet(Boolean) - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsInput
+
 
+
setRange(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setRecorder(Recorder) - 类 中的方法com.qingstor.sdk.upload.UploadManager
+
 
+
setReferer(Boolean) - 类 中的方法com.qingstor.sdk.service.Types.IsNullModel
+
 
+
setReferer(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.StringLikeModel
+
 
+
setReferer(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.StringNotLikeModel
+
 
+
setRequestID(String) - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
setRequestId(String) - 类 中的方法com.qingstor.sdk.model.OutputModel
+
 
+
setRequestUrlStyle(String) - 类 中的方法com.qingstor.sdk.config.EnvContext
+
+
You can use this method to change the url style.
+
+
setResource(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
setResponseCacheControl(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setResponseCacheControl(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
setResponseCacheControl(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
setResponseContentDisposition(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setResponseContentDisposition(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
setResponseContentDisposition(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
setResponseContentEncoding(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setResponseContentEncoding(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
setResponseContentEncoding(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
setResponseContentLanguage(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setResponseContentLanguage(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
setResponseContentLanguage(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
setResponseContentType(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setResponseContentType(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
setResponseContentType(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
setResponseExpires(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setResponseExpires(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
+
已过时。
+
+
setResponseExpires(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
setRule(List<Types.RuleModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketLifecycleOutput
+
 
+
setRule(List<Types.RuleModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketLifecycleInput
+
 
+
setSafeOkHttp(boolean) - 类 中的方法com.qingstor.sdk.config.EnvContext
+
+
已过时。
+
+
setSaveBucket(String) - 类 中的方法com.qingstor.sdk.service.Types.CloudfuncArgsModel
+
 
+
setServiceName(String) - 异常错误 中的方法com.qingstor.sdk.exception.QSException
+
 
+
setSignature(String, String) - 类 中的方法com.qingstor.sdk.request.QSBuilder
+
 
+
setSignature(String, String) - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
 
+
setSignature(String, String, String) - 类 中的方法com.qingstor.sdk.request.RequestHandler
+
+
Set signature and server time.
+
+
setSize(Long) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
setSize(Long) - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
setSize(Long) - 类 中的方法com.qingstor.sdk.service.Types.ObjectPartModel
+
 
+
setSourceIP(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.IPAddressModel
+
 
+
setSourceIP(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.NotIPAddressModel
+
 
+
setSourceSite(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketExternalMirrorOutput
+
 
+
setSourceSite(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketExternalMirrorInput
+
 
+
setStatement(List<Types.StatementModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketPolicyOutput
+
 
+
setStatement(List<Types.StatementModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketPolicyInput
+
 
+
setStatueCode(Integer) - 类 中的方法com.qingstor.sdk.model.OutputModel
+
 
+
setStatus(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
setStatus(String) - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
setStatusCode(int) - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
setStorageClass(Integer) - 类 中的方法com.qingstor.sdk.service.Types.TransitionModel
+
 
+
setStringLike(Types.StringLikeModel) - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
setStringNotLike(Types.StringNotLikeModel) - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
setTotalSize(long) - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
setTransition(Types.TransitionModel) - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
setType(String) - 类 中的方法com.qingstor.sdk.service.Types.GranteeModel
+
 
+
setUploadComplete(boolean) - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
setUploadID(String) - 类 中的方法com.qingstor.sdk.model.UploadModel
+
 
+
setUploadID(String) - 类 中的方法com.qingstor.sdk.service.Bucket.AbortMultipartUploadInput
+
 
+
setUploadID(String) - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
setUploadID(String) - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadOutput
+
 
+
setUploadID(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartInput
+
 
+
setUploadID(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setUploadID(String) - 类 中的方法com.qingstor.sdk.service.Types.UploadsModel
+
 
+
setUploadIDMarker(String) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
setUploads(List<Types.UploadsModel>) - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsOutput
+
 
+
setUri(String) - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
setUrl(String) - 类 中的方法com.qingstor.sdk.model.OutputModel
+
 
+
setURL(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetBucketStatisticsOutput
+
 
+
setURL(String) - 类 中的方法com.qingstor.sdk.service.Types.BucketModel
+
 
+
setUser(List<String>) - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
setXQSContentCopyRange(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartOutput
+
 
+
setXQSCopyRange(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSCopySource(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSCopySource(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSCopySourceEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSCopySourceEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSCopySourceEncryptionCustomerKey(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSCopySourceEncryptionCustomerKey(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSCopySourceEncryptionCustomerKeyMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSCopySourceEncryptionCustomerKeyMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSCopySourceIfMatch(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSCopySourceIfMatch(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSCopySourceIfModifiedSince(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSCopySourceIfModifiedSince(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSCopySourceIfNoneMatch(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSCopySourceIfNoneMatch(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSCopySourceIfUnmodifiedSince(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSCopySourceIfUnmodifiedSince(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadOutput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadOutput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectOutput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSEncryptionCustomerAlgorithm(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartOutput
+
 
+
setXQSEncryptionCustomerKey(String) - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
setXQSEncryptionCustomerKey(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setXQSEncryptionCustomerKey(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
setXQSEncryptionCustomerKey(String) - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
setXQSEncryptionCustomerKey(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSEncryptionCustomerKey(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSEncryptionCustomerKeyMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
setXQSEncryptionCustomerKeyMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
setXQSEncryptionCustomerKeyMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
setXQSEncryptionCustomerKeyMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
setXQSEncryptionCustomerKeyMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSEncryptionCustomerKeyMD5(String) - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
setXQSFetchIfUnmodifiedSince(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSFetchSource(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSMoveSource(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setXQSStorageClass(String) - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectOutput
+
 
+
setXQSStorageClass(String) - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectOutput
+
 
+
setXQSStorageClass(String) - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
setXQSStorageClass(String) - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
setZone(String) - 类 中的方法com.chengww.qingstor_sdk_android.db.MyBucket
+
 
+
size() - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
sortJSONArray(JSONArray) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
sortJSONArray(List, String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
sortJSONArrayAscending(List, String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
speed - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
start() - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
start() - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
startAll() - 类 中的方法com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
startAll() - 类 中的方法com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
startTransaction(BaseDao.Action) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
StatementModel() - 类 的构造器com.qingstor.sdk.service.Types.StatementModel
+
 
+
STATUS - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
status - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
string(Context, String) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.ResUtils
+
 
+
string(String) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.ResUtils
+
 
+
string(int) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.ResUtils
+
 
+
StringLikeModel() - 类 的构造器com.qingstor.sdk.service.Types.StringLikeModel
+
 
+
StringNotLikeModel() - 类 的构造器com.qingstor.sdk.service.Types.StringNotLikeModel
+
 
+
+ + + +

T

+
+
TableEntity - com.chengww.qingstor_sdk_android.db中的类
+
+
Created by chengww on 2018/12/28.
+
+
TableEntity(String) - 类 的构造器com.chengww.qingstor_sdk_android.db.TableEntity
+
 
+
tableName - 类 中的变量com.chengww.qingstor_sdk_android.db.TableEntity
+
 
+
TAG - 类 中的静态变量com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
TAG - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
tag - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
tag - 类 中的变量com.chengww.qingstor_sdk_android.listener.DownloadListener
+
 
+
tag - 类 中的变量com.chengww.qingstor_sdk_android.listener.UploadListener
+
 
+
TAG - 类 中的静态变量com.chengww.qingstor_sdk_android.task.Downloader
+
 
+
TAG - 类 中的静态变量com.chengww.qingstor_sdk_android.task.Uploader
+
 
+
take() - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
TaskException - com.chengww.qingstor_sdk_android.exception中的异常错误
+
+
Created by chengww on 2018/12/28.
+
+
TaskException(String) - 异常错误 的构造器com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
TaskException(OutputModel) - 异常错误 的构造器com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
TaskException(QSException) - 异常错误 的构造器com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
toArray() - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
toArray(T[]) - 类 中的方法com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue
+
 
+
toBoolean(JSONObject, String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toByteArray(Object) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
 
+
toDouble(JSONArray, int) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toDouble(JSONObject, String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toInt(JSONObject, String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toJSONArray(JSONObject, String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toJSONArray(JSONArray, int) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toJSONInt(JSONArray, int) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toJSONkey(JSONObject, int) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toJSONObject(JSONObject, int) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toJSONObject(String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toJSONObject(JSONObject, String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toJSONObject(JSONArray, int) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toJSONString(JSONArray, int) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toList(JSONArray) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toList(JSONObject, String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toMap(JSONObject) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toObject(byte[]) - 类 中的静态方法com.chengww.qingstor_sdk_android.utils.IOUtils
+
 
+
toObject(JSONArray, int) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
toObject(JSONObject, String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
top(int) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.WaterMarkImageParam.Builder
+
 
+
toString() - 类 中的方法com.chengww.qingstor_sdk_android.db.Progress
+
 
+
toString() - 异常错误 中的方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
toString(JSONObject, String) - 类 中的静态方法com.qingstor.sdk.utils.QSJSONUtil
+
 
+
TOTAL_SIZE - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
totalSize - 类 中的变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
TransitionModel() - 类 的构造器com.qingstor.sdk.service.Types.TransitionModel
+
 
+
type - 类 中的变量com.qingstor.sdk.client.ImageProcessClient.FormatParam
+
 
+
Types - com.qingstor.sdk.service中的类
+
 
+
Types() - 类 的构造器com.qingstor.sdk.service.Types
+
 
+
Types.AbortIncompleteMultipartUploadModel - com.qingstor.sdk.service中的类
+
 
+
Types.ACLModel - com.qingstor.sdk.service中的类
+
 
+
Types.BucketModel - com.qingstor.sdk.service中的类
+
 
+
Types.CloudfuncArgsModel - com.qingstor.sdk.service中的类
+
 
+
Types.ConditionModel - com.qingstor.sdk.service中的类
+
 
+
Types.CORSRuleModel - com.qingstor.sdk.service中的类
+
 
+
Types.ExpirationModel - com.qingstor.sdk.service中的类
+
 
+
Types.FilterModel - com.qingstor.sdk.service中的类
+
 
+
Types.GranteeModel - com.qingstor.sdk.service中的类
+
 
+
Types.IPAddressModel - com.qingstor.sdk.service中的类
+
 
+
Types.IsNullModel - com.qingstor.sdk.service中的类
+
 
+
Types.KeyDeleteErrorModel - com.qingstor.sdk.service中的类
+
 
+
Types.KeyModel - com.qingstor.sdk.service中的类
+
 
+
Types.NotificationModel - com.qingstor.sdk.service中的类
+
 
+
Types.NotIPAddressModel - com.qingstor.sdk.service中的类
+
 
+
Types.ObjectPartModel - com.qingstor.sdk.service中的类
+
 
+
Types.OwnerModel - com.qingstor.sdk.service中的类
+
 
+
Types.RuleModel - com.qingstor.sdk.service中的类
+
 
+
Types.StatementModel - com.qingstor.sdk.service中的类
+
 
+
Types.StringLikeModel - com.qingstor.sdk.service中的类
+
 
+
Types.StringNotLikeModel - com.qingstor.sdk.service中的类
+
 
+
Types.TransitionModel - com.qingstor.sdk.service中的类
+
 
+
Types.UploadsModel - com.qingstor.sdk.service中的类
+
 
+
+ + + +

U

+
+
unInit() - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
unInit() - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
unInit() - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
UNKNOWN() - 异常错误 中的静态方法com.chengww.qingstor_sdk_android.exception.TaskException
+
 
+
unRegister(DownloadListener) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
unRegister(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.DownloadTask
+
 
+
unRegister(UploadListener<String>) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
unRegister(String) - 类 中的方法com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
update(T, String, String[]) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
update(SQLiteDatabase, T, String, String[]) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
update(ContentValues, String, String[]) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
update(SQLiteDatabase, ContentValues, String, String[]) - 类 中的方法com.chengww.qingstor_sdk_android.db.BaseDao
+
 
+
update(Progress) - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
update(ContentValues, String) - 类 中的方法com.chengww.qingstor_sdk_android.db.DownloadTaskManager
+
 
+
update(Progress) - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
update(ContentValues, String) - 类 中的方法com.chengww.qingstor_sdk_android.db.UploadTaskManager
+
 
+
Uploader - com.chengww.qingstor_sdk_android.task中的类
+
+
Created by chengww on 2018/12/28.
+
+
UploadListener<String> - com.chengww.qingstor_sdk_android.listener中的类
+
+
Created by chengww on 2018/12/28.
+
+
UploadListener(Object) - 类 的构造器com.chengww.qingstor_sdk_android.listener.UploadListener
+
 
+
UploadManager - com.qingstor.sdk.upload中的类
+
+
A manager of uploading.
+
+
UploadManager(Bucket, Recorder, UploadProgressListener, CancellationHandler, UploadManagerCallback) - 类 的构造器com.qingstor.sdk.upload.UploadManager
+
 
+
UploadManager(Bucket, UploadManagerCallback) - 类 的构造器com.qingstor.sdk.upload.UploadManager
+
 
+
UploadManager.CompleteMultipartUploadInput - com.qingstor.sdk.upload中的类
+
 
+
UploadManager.PutObjectInput - com.qingstor.sdk.upload中的类
+
 
+
UploadManagerCallback<O extends OutputModel> - com.qingstor.sdk.upload中的类
+
+
Callback of the upload manager.
+
+
UploadManagerCallback() - 类 的构造器com.qingstor.sdk.upload.UploadManagerCallback
+
 
+
UploadModel - com.qingstor.sdk.model中的类
+
+
A model kept in the upload of FileRecorder
+ Created by chengww on 2018/1/23.
+
+
UploadModel() - 类 的构造器com.qingstor.sdk.model.UploadModel
+
 
+
UploadModel(int, String, boolean, long, long, boolean) - 类 的构造器com.qingstor.sdk.model.UploadModel
+
 
+
uploadMultipart(String, Bucket.UploadMultipartInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
uploadMultipartAsync(String, Bucket.UploadMultipartInput, ResponseCallBack<Bucket.UploadMultipartOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
uploadMultipartAsyncRequest(String, Bucket.UploadMultipartInput, ResponseCallBack<Bucket.UploadMultipartOutput>) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
UploadMultipartInput() - 类 的构造器com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
UploadMultipartOutput() - 类 的构造器com.qingstor.sdk.service.Bucket.UploadMultipartOutput
+
 
+
uploadMultipartRequest(String, Bucket.UploadMultipartInput) - 类 中的方法com.qingstor.sdk.service.Bucket
+
 
+
UploadProgressListener - com.qingstor.sdk.upload中的接口
+
+
Created by chengww on 2018/12/25.
+
+
UploadsModel() - 类 的构造器com.qingstor.sdk.service.Types.UploadsModel
+
 
+
UploadTask<String> - com.chengww.qingstor_sdk_android.task中的类
+
+
Created by chengww on 2018/12/28.
+
+
UploadTask(String, Bucket, String, String) - 类 的构造器com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
UploadTask(Progress) - 类 的构造器com.chengww.qingstor_sdk_android.task.UploadTask
+
 
+
UploadTaskManager - com.chengww.qingstor_sdk_android.db中的类
+
+
Created by chengww on 2018/12/28.
+
+
UploadThreadPool - com.chengww.qingstor_sdk_android.task中的类
+
+
Created by chengww on 2018/12/28.
+
+
UploadThreadPool() - 类 的构造器com.chengww.qingstor_sdk_android.task.UploadThreadPool
+
 
+
+ + + +

V

+
+
validateParam() - 类 中的方法com.qingstor.sdk.config.EnvContext
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.model.RequestInputModel
+
 
+
validateParam() - 接口 中的方法com.qingstor.sdk.request.ParamValidate
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.AbortMultipartUploadInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.CompleteMultipartUploadInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.DeleteMultipleObjectsInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.GetObjectInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.HeadObjectInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.ImageProcessInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.InitiateMultipartUploadInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.ListMultipartUploadsInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.ListObjectsInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.OptionsObjectInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketACLInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketCORSInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketExternalMirrorInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketLifecycleInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketNotificationInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.PutBucketPolicyInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.PutObjectInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Bucket.UploadMultipartInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.QingStor.ListBucketsInput
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.AbortIncompleteMultipartUploadModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.ACLModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.BucketModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.CloudfuncArgsModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.ConditionModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.CORSRuleModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.ExpirationModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.FilterModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.GranteeModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.IPAddressModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.IsNullModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.KeyDeleteErrorModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.KeyModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.NotificationModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.NotIPAddressModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.ObjectPartModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.OwnerModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.RuleModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.StatementModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.StringLikeModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.StringNotLikeModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.TransitionModel
+
 
+
validateParam() - 类 中的方法com.qingstor.sdk.service.Types.UploadsModel
+
 
+
VIRTUAL_HOST_STYLE - 类 中的静态变量com.qingstor.sdk.constants.QSConstant
+
 
+
+ + + +

W

+
+
WAITING - 类 中的静态变量com.chengww.qingstor_sdk_android.db.Progress
+
 
+
waterMark(ImageProcessClient.WaterMarkParam) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
waterMarkImage(ImageProcessClient.WaterMarkImageParam) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient
+
 
+
width(int) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.CropParam.Builder
+
 
+
width(int) - 类 中的方法com.qingstor.sdk.client.ImageProcessClient.ResizeParam.Builder
+
 
+
writeTo(BufferedSink) - 类 中的方法com.qingstor.sdk.request.impl.EmptyRequestBody
+
 
+
writeTo(BufferedSink) - 类 中的方法com.qingstor.sdk.request.impl.InputStreamUploadBody
+
 
+
writeTo(BufferedSink) - 类 中的方法com.qingstor.sdk.request.impl.MultiFileuploadRequestBody
+
 
+
writeTo(BufferedSink) - 类 中的方法com.qingstor.sdk.request.impl.ProgressRequestBody
+
 
+
+ + + +

X

+
+
XExecutor - com.chengww.qingstor_sdk_android.task中的类
+
 
+
XExecutor(int, int, long, TimeUnit, BlockingQueue<Runnable>, RejectedExecutionHandler) - 类 的构造器com.chengww.qingstor_sdk_android.task.XExecutor
+
 
+
XExecutor(int, int, long, TimeUnit, BlockingQueue<Runnable>, ThreadFactory, RejectedExecutionHandler) - 类 的构造器com.chengww.qingstor_sdk_android.task.XExecutor
+
 
+
XExecutor(int, int, long, TimeUnit, BlockingQueue<Runnable>, ThreadFactory) - 类 的构造器com.chengww.qingstor_sdk_android.task.XExecutor
+
 
+
XExecutor(int, int, long, TimeUnit, BlockingQueue<Runnable>) - 类 的构造器com.chengww.qingstor_sdk_android.task.XExecutor
+
 
+
XExecutor.OnAllTaskEndListener - com.chengww.qingstor_sdk_android.task中的接口
+
 
+
XExecutor.OnTaskEndListener - com.chengww.qingstor_sdk_android.task中的接口
+
 
+
+A B C D E F G H I J K L M N O P Q R S T U V W X 
+ +
+ + + + + + + +
+ + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..777ed32 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,76 @@ + + + + + + +qingstor-sdk-android docs + + + + + + + + + +<noscript> +<div>您的浏览器已禁用 JavaScript。</div> +</noscript> +<h2>框架预警</h2> +<p>请使用框架功能查看此文档。如果看到此消息, 则表明您使用的是不支持框架的 Web 客户机。链接到<a href="overview-summary.html">非框架版本</a>。</p> + + + diff --git a/docs/overview-frame.html b/docs/overview-frame.html new file mode 100644 index 0000000..6cc34cc --- /dev/null +++ b/docs/overview-frame.html @@ -0,0 +1,40 @@ + + + + + + +概览列表 (qingstor-sdk-android docs) + + + + + + + +

 

+ + diff --git a/docs/overview-summary.html b/docs/overview-summary.html new file mode 100644 index 0000000..5f16842 --- /dev/null +++ b/docs/overview-summary.html @@ -0,0 +1,209 @@ + + + + + + +概览 (qingstor-sdk-android docs) + + + + + + + + +
+ + + + + + + +
+ + +
+

qingstor-sdk-android docs

+
+ + +
+ + + + + + + +
+ + + + diff --git a/docs/overview-tree.html b/docs/overview-tree.html new file mode 100644 index 0000000..0262bfd --- /dev/null +++ b/docs/overview-tree.html @@ -0,0 +1,399 @@ + + + + + + +类分层结构 (qingstor-sdk-android docs) + + + + + + + + +
+ + + + + + + +
+ + + +
+

类分层结构

+ +

接口分层结构

+ +

注释类型分层结构

+
    +
  • com.qingstor.sdk.annotation.ParamAnnotation (implements java.lang.annotation.Annotation)
  • +
+
+ +
+ + + + + + + +
+ + + + diff --git a/docs/package-list b/docs/package-list new file mode 100644 index 0000000..e9369df --- /dev/null +++ b/docs/package-list @@ -0,0 +1,19 @@ +com.chengww.qingstor_sdk_android +com.chengww.qingstor_sdk_android.db +com.chengww.qingstor_sdk_android.exception +com.chengww.qingstor_sdk_android.listener +com.chengww.qingstor_sdk_android.recorder +com.chengww.qingstor_sdk_android.task +com.chengww.qingstor_sdk_android.utils +com.qingstor.sdk.annotation +com.qingstor.sdk.client +com.qingstor.sdk.config +com.qingstor.sdk.constants +com.qingstor.sdk.exception +com.qingstor.sdk.model +com.qingstor.sdk.request +com.qingstor.sdk.request.impl +com.qingstor.sdk.service +com.qingstor.sdk.upload +com.qingstor.sdk.upload.impl +com.qingstor.sdk.utils diff --git a/docs/script.js b/docs/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/docs/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/docs/serialized-form.html b/docs/serialized-form.html new file mode 100644 index 0000000..39c22f6 --- /dev/null +++ b/docs/serialized-form.html @@ -0,0 +1,479 @@ + + + + + + +序列化表格 (qingstor-sdk-android docs) + + + + + + + + + + + +
+

序列化表格

+
+
+
    +
  • +

    程序包 com.chengww.qingstor_sdk_android.db

    +
      +
    • + + +

      com.chengww.qingstor_sdk_android.db.MyBucket扩展java.lang.Object实现可序列化

      +
        +
      • +

        序列化字段

        +
          +
        • +

          zone

          +
          java.lang.String zone
          +
        • +
        • +

          bucketName

          +
          java.lang.String bucketName
          +
        • +
        • +

          envContext

          +
          EnvContext envContext
          +
        • +
        +
      • +
      +
    • +
    • + + +

      com.chengww.qingstor_sdk_android.db.Progress扩展java.lang.Object实现可序列化

      +
        +
      • +

        序列化字段

        +
          +
        • +

          tag

          +
          java.lang.String tag
          +
        • +
        • +

          myBucket

          +
          MyBucket myBucket
          +
        • +
        • +

          objectKey

          +
          java.lang.String objectKey
          +
        • +
        • +

          folder

          +
          java.lang.String folder
          +
        • +
        • +

          filePath

          +
          java.lang.String filePath
          +
        • +
        • +

          fileName

          +
          java.lang.String fileName
          +
        • +
        • +

          fraction

          +
          float fraction
          +
        • +
        • +

          totalSize

          +
          long totalSize
          +
        • +
        • +

          currentSize

          +
          long currentSize
          +
        • +
        • +

          status

          +
          int status
          +
        • +
        • +

          date

          +
          long date
          +
        • +
        • +

          extra1

          +
          java.io.Serializable extra1
          +
        • +
        • +

          extra2

          +
          java.io.Serializable extra2
          +
        • +
        • +

          extra3

          +
          java.io.Serializable extra3
          +
        • +
        • +

          exception

          +
          TaskException exception
          +
        • +
        • +

          recorderBean

          +
          byte[] recorderBean
          +
        • +
        +
      • +
      +
    • +
    +
  • +
  • +

    程序包 com.chengww.qingstor_sdk_android.exception

    +
      +
    • + + +

      com.chengww.qingstor_sdk_android.exception.TaskException扩展java.lang.Exception实现可序列化

      +
        +
      • +

        序列化字段

        +
          +
        • +

          statusCode

          +
          int statusCode
          +
        • +
        • +

          code

          +
          java.lang.String code
          +
        • +
        • +

          message

          +
          java.lang.String message
          +
        • +
        • +

          requestID

          +
          java.lang.String requestID
          +
        • +
        • +

          helpUrl

          +
          java.lang.String helpUrl
          +
        • +
        • +

          i18nHint

          +
          java.lang.String i18nHint
          +
        • +
        +
      • +
      +
    • +
    +
  • +
  • +

    程序包 com.chengww.qingstor_sdk_android.task

    +
      +
    • + + +

      com.chengww.qingstor_sdk_android.task.PriorityBlockingQueue扩展java.util.AbstractQueue<E>实现可序列化

      +
        +
      • +

        序列化方法

        +
          +
        • +

          readObject

          +
          private void readObject(java.io.ObjectInputStream s)
          +                 throws java.io.IOException,
          +                        java.lang.ClassNotFoundException
          +
          Reconstitutes this queue from a stream (that is, deserializes it).
          +
          +
          抛出:
          +
          java.io.IOException
          +
          java.lang.ClassNotFoundException
          +
          +
        • +
        • +

          writeObject

          +
          private void writeObject(java.io.ObjectOutputStream s)
          +                  throws java.io.IOException
          +
          +
          抛出:
          +
          java.io.IOException
          +
          +
        • +
        +
      • +
      • +

        序列化字段

        +
          +
        • +

          capacity

          +
          int capacity
          +
          The capacity bound, or Integer.MAX_VALUE if none
          +
        • +
        • +

          count

          +
          java.util.concurrent.atomic.AtomicInteger count
          +
          Current number of elements
          +
        • +
        • +

          takeLock

          +
          java.util.concurrent.locks.ReentrantLock takeLock
          +
          Lock held by take, poll, etc
          +
        • +
        • +

          notEmpty

          +
          java.util.concurrent.locks.Condition notEmpty
          +
          Wait queue for waiting takes
          +
        • +
        • +

          putLock

          +
          java.util.concurrent.locks.ReentrantLock putLock
          +
          Lock held by put, offer, etc
          +
        • +
        • +

          notFull

          +
          java.util.concurrent.locks.Condition notFull
          +
          Wait queue for waiting puts
          +
        • +
        +
      • +
      +
    • +
    +
  • +
  • +

    程序包 com.qingstor.sdk.config

    +
      +
    • + + +

      com.qingstor.sdk.config.EnvContext扩展java.lang.Object实现可序列化

      +
        +
      • +

        序列化字段

        +
          +
        • +

          accessKey

          +
          java.lang.String accessKey
          +
        • +
        • +

          accessSecret

          +
          java.lang.String accessSecret
          +
        • +
        • +

          host

          +
          java.lang.String host
          +
        • +
        • +

          port

          +
          java.lang.String port
          +
        • +
        • +

          protocol

          +
          java.lang.String protocol
          +
        • +
        • +

          uri

          +
          java.lang.String uri
          +
        • +
        • +

          log_level

          +
          java.lang.String log_level
          +
        • +
        • +

          additionalUserAgent

          +
          java.lang.String additionalUserAgent
          +
        • +
        • +

          requestUrlStyle

          +
          java.lang.String requestUrlStyle
          +
        • +
        • +

          safeOkHttp

          +
          boolean safeOkHttp
          +
        • +
        +
      • +
      +
    • +
    • + + +

      com.qingstor.sdk.config.EvnContext扩展EnvContext实现可序列化

      +
    • +
    +
  • +
  • +

    程序包 com.qingstor.sdk.exception

    +
      +
    • + + +

      com.qingstor.sdk.exception.QSException扩展java.lang.RuntimeException实现可序列化

      +
      +
      serialVersionUID:
      +
      -5562309362764717920L
      +
      +
        +
      • +

        序列化字段

        +
          +
        • +

          serviceName

          +
          java.lang.String serviceName
          +
        • +
        • +

          errorCode

          +
          int errorCode
          +
        • +
        • +

          errorMessage

          +
          java.lang.String errorMessage
          +
        • +
        +
      • +
      +
    • +
    +
  • +
  • +

    程序包 com.qingstor.sdk.request

    + +
  • +
  • +

    程序包 com.qingstor.sdk.service

    +
      +
    • + + +

      com.qingstor.sdk.service.Bucket扩展java.lang.Object实现可序列化

      +
        +
      • +

        序列化字段

        +
          +
        • +

          zone

          +
          java.lang.String zone
          +
        • +
        • +

          bucketName

          +
          java.lang.String bucketName
          +
        • +
        • +

          envContext

          +
          EnvContext envContext
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+ + + + + + diff --git a/docs/stylesheet.css b/docs/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/docs/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} From 256e9d24225ca5eded9ce594afdb6cd1c77a28e2 Mon Sep 17 00:00:00 2001 From: chengww Date: Wed, 6 Mar 2019 15:31:35 +0800 Subject: [PATCH 10/12] Add the demo --- demo/.gitignore | 1 + demo/README-zh_CN.md | 20 ++ demo/README.md | 21 ++ demo/build.gradle | 46 +++ demo/proguard-rules.pro | 76 +++++ demo/release/demo-release.apk | Bin 0 -> 1385691 bytes demo/release/output.json | 1 + .../chengww/demo/ExampleInstrumentedTest.java | 26 ++ demo/src/main/AndroidManifest.xml | 32 +++ .../java/com/chengww/demo/MyApplication.java | 30 ++ .../chengww/demo/activity/BaseActivity.java | 80 ++++++ .../demo/activity/BucketListActivity.java | 202 +++++++++++++ .../demo/activity/DownloadListActivity.java | 116 ++++++++ .../chengww/demo/activity/MainActivity.java | 95 +++++++ .../demo/activity/ObjectListActivity.java | 235 ++++++++++++++++ .../demo/activity/UploadDetailActivity.java | 97 +++++++ .../demo/activity/UploadListActivity.java | 266 ++++++++++++++++++ .../demo/adapter/BucketListAdapter.java | 24 ++ .../demo/adapter/DownloadListAdapter.java | 126 +++++++++ .../demo/adapter/ObjectListAdapter.java | 47 ++++ .../demo/adapter/UploadListAdapter.java | 127 +++++++++ .../com/chengww/demo/constants/Constants.java | 20 ++ .../chengww/demo/model/ListObjectsModel.java | 35 +++ .../com/chengww/demo/model/MessageEvent.java | 45 +++ .../demo/model/ObjectListEventModel.java | 53 ++++ .../chengww/demo/model/UploadListModel.java | 53 ++++ .../chengww/demo/utils/BindContentView.java | 17 ++ .../com/chengww/demo/utils/BindEventBus.java | 15 + .../com/chengww/demo/utils/FileUtils.java | 101 +++++++ .../com/chengww/demo/utils/MyDateUtils.java | 32 +++ .../demo/utils/SharedPreferencesUtils.java | 114 ++++++++ .../com/chengww/demo/utils/StringUtils.java | 32 +++ .../com/chengww/demo/utils/ToastUtils.java | 27 ++ .../chengww/demo/view/CircleProgressBar.java | 148 ++++++++++ .../drawable-v24/ic_launcher_foreground.xml | 34 +++ demo/src/main/res/drawable/ic_file_40dp.xml | 5 + demo/src/main/res/drawable/ic_folder_40dp.xml | 5 + .../res/drawable/ic_launcher_background.xml | 170 +++++++++++ .../main/res/layout/activity_bucket_list.xml | 14 + .../res/layout/activity_download_list.xml | 22 ++ demo/src/main/res/layout/activity_main.xml | 53 ++++ .../main/res/layout/activity_object_list.xml | 21 ++ .../res/layout/activity_upload_detail.xml | 50 ++++ .../main/res/layout/activity_upload_list.xml | 7 + .../main/res/layout/dialog_create_bucket.xml | 40 +++ demo/src/main/res/layout/item_bucket_list.xml | 29 ++ .../main/res/layout/item_download_list.xml | 50 ++++ demo/src/main/res/layout/item_object_list.xml | 58 ++++ demo/src/main/res/menu/menu_bucket_list.xml | 11 + demo/src/main/res/menu/menu_download_list.xml | 7 + demo/src/main/res/menu/menu_object_list.xml | 11 + demo/src/main/res/menu/menu_upload_list.xml | 13 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + demo/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2963 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4905 bytes demo/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2060 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2783 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4490 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6895 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes demo/src/main/res/mipmap-xxxhdpi/ic_add.png | Bin 0 -> 8398 bytes demo/src/main/res/mipmap-xxxhdpi/ic_error.png | Bin 0 -> 18142 bytes .../src/main/res/mipmap-xxxhdpi/ic_finish.png | Bin 0 -> 17175 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes demo/src/main/res/mipmap-xxxhdpi/ic_pause.png | Bin 0 -> 18774 bytes .../main/res/mipmap-xxxhdpi/ic_waiting.png | Bin 0 -> 16254 bytes demo/src/main/res/values-zh/strings.xml | 37 +++ demo/src/main/res/values/attrs.xml | 10 + demo/src/main/res/values/colors.xml | 6 + demo/src/main/res/values/dimens.xml | 3 + demo/src/main/res/values/strings.xml | 36 +++ demo/src/main/res/values/styles.xml | 20 ++ .../com/chengww/demo/ExampleUnitTest.java | 17 ++ 76 files changed, 3099 insertions(+) create mode 100644 demo/.gitignore create mode 100644 demo/README-zh_CN.md create mode 100644 demo/README.md create mode 100644 demo/build.gradle create mode 100644 demo/proguard-rules.pro create mode 100644 demo/release/demo-release.apk create mode 100644 demo/release/output.json create mode 100644 demo/src/androidTest/java/com/chengww/demo/ExampleInstrumentedTest.java create mode 100644 demo/src/main/AndroidManifest.xml create mode 100644 demo/src/main/java/com/chengww/demo/MyApplication.java create mode 100644 demo/src/main/java/com/chengww/demo/activity/BaseActivity.java create mode 100644 demo/src/main/java/com/chengww/demo/activity/BucketListActivity.java create mode 100644 demo/src/main/java/com/chengww/demo/activity/DownloadListActivity.java create mode 100644 demo/src/main/java/com/chengww/demo/activity/MainActivity.java create mode 100644 demo/src/main/java/com/chengww/demo/activity/ObjectListActivity.java create mode 100644 demo/src/main/java/com/chengww/demo/activity/UploadDetailActivity.java create mode 100644 demo/src/main/java/com/chengww/demo/activity/UploadListActivity.java create mode 100644 demo/src/main/java/com/chengww/demo/adapter/BucketListAdapter.java create mode 100644 demo/src/main/java/com/chengww/demo/adapter/DownloadListAdapter.java create mode 100644 demo/src/main/java/com/chengww/demo/adapter/ObjectListAdapter.java create mode 100644 demo/src/main/java/com/chengww/demo/adapter/UploadListAdapter.java create mode 100644 demo/src/main/java/com/chengww/demo/constants/Constants.java create mode 100644 demo/src/main/java/com/chengww/demo/model/ListObjectsModel.java create mode 100644 demo/src/main/java/com/chengww/demo/model/MessageEvent.java create mode 100644 demo/src/main/java/com/chengww/demo/model/ObjectListEventModel.java create mode 100644 demo/src/main/java/com/chengww/demo/model/UploadListModel.java create mode 100644 demo/src/main/java/com/chengww/demo/utils/BindContentView.java create mode 100644 demo/src/main/java/com/chengww/demo/utils/BindEventBus.java create mode 100644 demo/src/main/java/com/chengww/demo/utils/FileUtils.java create mode 100644 demo/src/main/java/com/chengww/demo/utils/MyDateUtils.java create mode 100644 demo/src/main/java/com/chengww/demo/utils/SharedPreferencesUtils.java create mode 100644 demo/src/main/java/com/chengww/demo/utils/StringUtils.java create mode 100644 demo/src/main/java/com/chengww/demo/utils/ToastUtils.java create mode 100644 demo/src/main/java/com/chengww/demo/view/CircleProgressBar.java create mode 100644 demo/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 demo/src/main/res/drawable/ic_file_40dp.xml create mode 100644 demo/src/main/res/drawable/ic_folder_40dp.xml create mode 100644 demo/src/main/res/drawable/ic_launcher_background.xml create mode 100644 demo/src/main/res/layout/activity_bucket_list.xml create mode 100644 demo/src/main/res/layout/activity_download_list.xml create mode 100644 demo/src/main/res/layout/activity_main.xml create mode 100644 demo/src/main/res/layout/activity_object_list.xml create mode 100644 demo/src/main/res/layout/activity_upload_detail.xml create mode 100644 demo/src/main/res/layout/activity_upload_list.xml create mode 100644 demo/src/main/res/layout/dialog_create_bucket.xml create mode 100644 demo/src/main/res/layout/item_bucket_list.xml create mode 100644 demo/src/main/res/layout/item_download_list.xml create mode 100644 demo/src/main/res/layout/item_object_list.xml create mode 100644 demo/src/main/res/menu/menu_bucket_list.xml create mode 100644 demo/src/main/res/menu/menu_download_list.xml create mode 100644 demo/src/main/res/menu/menu_object_list.xml create mode 100644 demo/src/main/res/menu/menu_upload_list.xml create mode 100644 demo/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 demo/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 demo/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 demo/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 demo/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 demo/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 demo/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 demo/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 demo/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 demo/src/main/res/mipmap-xxxhdpi/ic_add.png create mode 100644 demo/src/main/res/mipmap-xxxhdpi/ic_error.png create mode 100644 demo/src/main/res/mipmap-xxxhdpi/ic_finish.png create mode 100644 demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 demo/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 demo/src/main/res/mipmap-xxxhdpi/ic_pause.png create mode 100644 demo/src/main/res/mipmap-xxxhdpi/ic_waiting.png create mode 100644 demo/src/main/res/values-zh/strings.xml create mode 100644 demo/src/main/res/values/attrs.xml create mode 100644 demo/src/main/res/values/colors.xml create mode 100644 demo/src/main/res/values/dimens.xml create mode 100644 demo/src/main/res/values/strings.xml create mode 100644 demo/src/main/res/values/styles.xml create mode 100644 demo/src/test/java/com/chengww/demo/ExampleUnitTest.java diff --git a/demo/.gitignore b/demo/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/demo/.gitignore @@ -0,0 +1 @@ +/build diff --git a/demo/README-zh_CN.md b/demo/README-zh_CN.md new file mode 100644 index 0000000..18ced83 --- /dev/null +++ b/demo/README-zh_CN.md @@ -0,0 +1,20 @@ +# QingStor SDK for Android Demo + +[English](./README.md) | 简体中文 + +该项目仅为简单体验,并没有覆盖所有 API。点击下载 APK 体验: + +- [Github 分流](./release/demo-release.apk) +- [中国下载地址](https://js-cdn.pek3b.qingstor.com/qingstor-sdk-android/demo-release.apk) + +主要使用了以下 API: + +- ListBuckets: `MainActivity#listBuckets()`、`BucketListActivity#refresh()` +- PutBucket: `BucketListActivity#createBucket(zone, bucketName)` +- ListObjects: `ObjectListActivity#listObject(isLoadMore)` +- DeleteObjects: `ObjectListActivity#deleteObject()` +- Downloader 相关 API:`ObjectListActivity`、`DownloadListActivity`、`DownloadListAdapter` +- Uploader 相关 API:`UploadListActivity`、`UploadDetailActivity`、`UploadListAdapter` + +项目中使用 JDK 1.8 进行编译,其内部的某些匿名内部类已转换为 lambda 表达式(因 QingStor SDK Java 的问题,Java sdk 内的相关匿名内部类不能转换成 lambda)。 + diff --git a/demo/README.md b/demo/README.md new file mode 100644 index 0000000..e67c208 --- /dev/null +++ b/demo/README.md @@ -0,0 +1,21 @@ +# QingStor SDK for Android Demo + +English | [简体中文](./README-zh_CN.md) + +The project is a simple experience and does not cover all APIs. + +Click to download the APK file: + +- [Github download address](./release/demo-release.apk) +- [Download address for China](https://js-cdn.pek3b.qingstor.com/qingstor-sdk-android/demo-release.apk) + +The following APIs are mainly used: + +- ListBuckets: `MainActivity#listBuckets()`、`BucketListActivity#refresh()` +- PutBucket: `BucketListActivity#createBucket(zone, bucketName)` +- ListObjects: `ObjectListActivity#listObject(isLoadMore)` +- DeleteObjects: `ObjectListActivity#deleteObject()` +- Downloader related APIs:`ObjectListActivity`、`DownloadListActivity`、`DownloadListAdapter` +- Uploader related APIs:`UploadListActivity`、`UploadDetailActivity`、`UploadListAdapter` + +JDK 1.8 is used for compilation in the project, and some anonymous inner classes in the project have been converted to lambda expressions (due to QingStor SDK Java's problem, the related anonymous inner classes in Java SDK can not be converted to the lambda). \ No newline at end of file diff --git a/demo/build.gradle b/demo/build.gradle new file mode 100644 index 0000000..2961faf --- /dev/null +++ b/demo/build.gradle @@ -0,0 +1,46 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + + compileOptions { + targetCompatibility = "8" + sourceCompatibility = "8" + } + + defaultConfig { + applicationId "com.chengww.demo" + minSdkVersion 19 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + + buildTypes { + release { + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:recyclerview-v7:28.0.0' + implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'org.greenrobot:eventbus:3.1.1' + implementation 'com.jakewharton:butterknife:9.0.0' + annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0' +// implementation project(':qingstor-sdk-android') + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46' + implementation 'com.chengww:qingstor-sdk-android:0.1.0' +} diff --git a/demo/proguard-rules.pro b/demo/proguard-rules.pro new file mode 100644 index 0000000..c2fa1b4 --- /dev/null +++ b/demo/proguard-rules.pro @@ -0,0 +1,76 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +##---------------Begin: proguard configuration for Gson ---------- +# Gson uses generic type information stored in a class file when working with fields. Proguard +# removes such information by default, so configure it to keep all of it. +-keepattributes Signature + +# For using GSON @Expose annotation +-keepattributes *Annotation* + +# Gson specific classes +-dontwarn sun.misc.** +#-keep class com.google.gson.stream.** { *; } + +# Application classes that will be serialized/deserialized over Gson +-keep class com.google.gson.examples.android.model.** { *; } + +# Prevent proguard from stripping interface information from TypeAdapterFactory, +# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter) +-keep class * implements com.google.gson.TypeAdapterFactory +-keep class * implements com.google.gson.JsonSerializer +-keep class * implements com.google.gson.JsonDeserializer + +##---------------End: proguard configuration for Gson ---------- + +##---------------Begin: proguard configuration for okhttp ---------- +# JSR 305 annotations are for embedding nullability information. +-dontwarn javax.annotation.** + +# A resource is loaded with a relative path so the package of this class must be preserved. +-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase + +# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. +-dontwarn org.codehaus.mojo.animal_sniffer.* + +# OkHttp platform used only on JVM and when Conscrypt dependency is available. +-dontwarn okhttp3.internal.platform.ConscryptPlatform +##---------------End: proguard configuration for okhttp ---------- + +##---------------Begin: proguard configuration for qingstor-sdk-java ---------- +-keep class com.qingstor.sdk.model.** { *; } +-keep class com.qingstor.sdk.service.** { *; } +-keep class com.chengww.qingstor_sdk_android.R$* { *;} +##---------------End: proguard configuration for qingstor-sdk-java ---------- + +#---- Event BUS ----# +-keepattributes *Annotation* +-keepclassmembers class * { + @org.greenrobot.eventbus.Subscribe ; +} +-keep enum org.greenrobot.eventbus.ThreadMode { *; } + +# Only required if you use AsyncExecutor +-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { + (java.lang.Throwable); +} \ No newline at end of file diff --git a/demo/release/demo-release.apk b/demo/release/demo-release.apk new file mode 100644 index 0000000000000000000000000000000000000000..139160c13e0ba95b5a17e5c2405d09af75cea06e GIT binary patch literal 1385691 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%0Df{H7St$f3l8K%Upz$ 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�s>UaV@bJW1`piF8riPW-N)Q+uH$ zP&W(XOz5n94w4jy@)7HD`0j$!E!<2$j7Audi32=cf}k8VV)cdaKFl1D3_nGZ;ejA0 z&V{%047{Q9v>`o2_tH7TEU_mtU4-PbgJA5NK(n*ZM`6ojV_-@dA98 zqfM6QRn+6kaFD_AN z9Z*Z7iq;nl)__+Oto3MKde09iIJ=5L>n6B|YPoZ{@Dcw3Vgf`7yQVu=pu!RmQUevX~p~*A*?*ls64Dpyd4_wN6HFrt{%}P{JEg*fJDy zo+Tad5;(m^M@yt5$C;dCo7zkgE}Xap3ZjWF3*X%KuqRoXy5oR;W?y3 zn*K0uKp(Rw4eTY5y-v-EJ|luRx5zGv!3qEwS~gp_r(!F;Y8b5EZ|F+vun_Ko^$XM& z@MJqF%K=Qva+Qm3Bgf=f^KXPwfqEy*2 z>xI=tT9;T}HZnlt=ZEmVd2mhKEu+fE1m-k{;c4 zw8p|Rf3?dxze05mmSa;n3qpdGOQ^;8Yr<#-c*&9e_?L57v%L9a;dr6BJRs+?yr~Cs zd5)aR3PUSYaSi%emveaqj@F!<%T9SNLwr(~b6IC`L(b(jG?%B+Tt+_wGIv^gu)Ua@ zVJuwJ=(~;yeAnOLyHNVawyb=Y9++DN>c52{7r4-84b}U`9Y*a+2u5%YzQ?zi(@%3G z-#;5>&>N^}9f&3C1pV?I<=9m04AU0W9sog0$UWJyOt#NI!YQ(h%w)Xt&#=5r`#pVu z!iBss8y7J9GHuVfywdM@?%kp|oni$E`*_L#7xBW!LvhYH5jU4G5Rb z^;gri>!zwSzJ_JBOd{{f91il&Q-;MF`4t`j{2v;ufe+p4I$UTrlHIG)3|?b4(mk)P z=R(u*<;zN+R;9@-GNmukUE#_5ct%fivY%%3?^YUFkf(6LZ>fsU z%!F@|_npCjm};5i8h- z0_>ql2%Ai>cK|j|47DF7%6q6)>-r3EPd>8fEhDRx??&&*o_eEwt48OpdwMq6sNDYx zzCF$Re@VBeu+jNR?LOb(V)VO3hkLZJQNAPmd}#Sa5BTVHM~;B`Ghg626)W!}c`#gK z^a0nQcYc(hr8Brkcs=-Q>O^elWTC#ufP|If>;1Jj|QB_z_*QX=B<;XVP2C3_|}b5qLwen0a}!C93rkh&NI{6!;R+TxDNv3guq{H0{?BxoV9CeAwfe zAI4TNrz7~D@t8W*sY5Ip3S&u-&Ek{vM?H zL0y{GfbMF+Iu7XMkm!{sK6IYhuT<_pG|pGBkE8R->U;+)!MhW+-;HCTz>lwKZ_*jg z93N;=91q>B_MDA)T?*1U=!NLz$qL7{ONA1R_s%v>6oZLRh+eL%CoOjp{%>WvE;|Qz@Y_fVzklP3#8R4ay4+GD6|$tp=~LA zR|n1Tg1~ug*Q`VLB3=7W(A~m8r~&HMkq56GXM0HYz`Z ztFEcUzfNb%M9|j_l*ylm-wW`ozuT}v>TY{y2#sx*Efvc}fuAgz>-@)Keq8+y!4t!B z2g$WghS~TOFIpv&)t#Xkm3$oYNgwCj?-M*f%#WXo$ zQ_LS^cB*pEE4VlB=H!>S{g85CIZ(sm;)6(onN`Whi)c)r;+-|T4ej<*^zIH2gchAs zacvDD7|FSn<{XQl)~{4)n}POf08;2YMWlscx&1&DIi93%0Gi_VPar*bOjW@h=MRl@ z2PVJ_dP}v$V1HEfHAu5{+~C|Oq8QcLWnvNuK(>C6={%MLTo1S}^3 z?Y-Ar!xrd@mR~ns9BdYtd)gO7pNaavSDNQRjsm>9>m1Q*E@Jr1UkPkP12spP2sfWu8RxIwcH$mG)WdWU#+UyJ$6;i3~AZ(Q_MZ( z3skey%Qe%{p2BI&9u7Phq zoZ++btvQzBN18qAK`g1w;_lWpglissE!xHSyS{=g(73u>gIZ}&EA7>)UAZGuq#Bo`A$x+$R%2?gj#59pwtj65 z>SwULoe^CFKCVB@dQECjr?v)ls?U#gQEP1nI*2pr=?~Z99mCv2End9sH`VB5WuGX7 z`;WE~Q-bHgw3bCCso?Z@vtyn7Lh4ww%+XKGMJzx?(^UKwtyDY{VS zrWNIHDg#oc{}>aE_5m&uu^PJr?X*XCkUEn2&J;^5#N> z{);L1vM~|F{@Rp#qeW*s<&-sezIj=btikhCx*s2rb-0JcB4r!!!uPp{dXwnkub4|4 zD-7vjDXGaE?JTAhbF&ey^=bgu5kB5r!eV+a8)ELE=abC>jVxXNP0-U>qu?{nzcUWU zDYn1Odo>u%12Q%FJ93_zQr4eODzdZ`iz#+2tu$%Vv_8HM^p;F7Eyk_n@>G5j$lS6P z=!Lq8qmP7OJrFZK(VCO2Z=C8ojoVrudR>JSOMqvF^;z`RX59R_PtCSjJ6}J0x_$!o zjCmY$=OM;F8#>8N3%&Pu@!d=xUR7QuYqpbb%vz|%YoTrW&7a#iyR@*&Y#&pXV^NoR zPF)U4JGK_uu3tYJ)32cPeWrl#U|gpWdo=v!kZ(Ncce%rpjeAHRhO-6qgcY;6i68Nu zruqCkO()jxt(^|*z(Y+Liq-Au#7NfH{5AK*05o1P{~vYl9v@d#EspQUdCep5fl(#pqGBvTKmk*nMqQR`~CeszuzCpoc(^Sz4lsbue}ztnZ@I* zRh&P|d=1zBPsBN+)_h#HicikmlD;z8EgHp`HU_6ZleX3f^b+1vqNg4Y;KA&2{^Ycv zho1{YIOHtA_|LJ%FnYlQ+VMm+2g-KRa&s$Czx^84-WNp+%-cGmcouYavYz=#))z)R zKvugd*#8WERWk0sn?!5gDWSgb|CTcDuh{R(%tyQLM_ZqU_JAVo?Fag%FO0qIw!Q*! z7|wJWl;=1IpCI7G6bHZzz=_$Q+H7F0joT7f|4+*PtQu9QweduzzVQFq5FV?9Pw!bn zy=h>L4S0HfjrD5>GH+}L&{ID&#o|UbYITafkjD7sDZ%q2A}vPrZczv`F>1{d1!IBm z#?FEBbs_zh_nimpP|Rgaw;Qd1MJ%%+HETFG4=DB%+32D3gtr08qEB!PNN{=KTmu*4FT%k~i=gAGKcY z7~ue0K%~FI=~sE1PvJwfKEQh3%45V_?GUYK|F~1>h&jUdb1AdHxng@A(4O0~OjGao z>7MoF7?d0l*aPIPV_J~bKp9y+cQ*0lS(o1YGjCAQSahS?Jza$>R=I$Vkx0j^G1vR! zacsqX$4F*Xr6rCce!sSEQ$nvbZ<}gCM=zx7fO^`dTF`x7zfW(1^M1AY!4RHR5!MeB zO}kWfg(caJUeBCnvbXz~cgE=g@4fIB>$KoJ%bwSw!cb=m*}2AEqXcqQ?*%Lz>PN4H z_GzZ2m%}Ub5+g|n%nMhvHm|WU+$Y-@V)|6;2L21yB$`-n z0=0Y2?2zQ|jeI9HD40R*rXz9n{P~UrB%oz^&)K5aEn8!Y3G@+b_${s?n&@=Pf|4co zWcc;YL*8T>TN-X+{h>I8t6G8~((@_n5d-vGaIx?%{E#ruH?QKK=eKP&hEdl()E8=I zqdT_<@57M(kq?Pd`grS$4JG>%&;sn^koxKh740+Nw`3m#|6@Qb9z?PtJb}>;qfr^j z7l`iNPH)y}#_fKqgDnlUvnK@1hyd#SnC+D{-eWDbXorj-kG7`w65PxE^}!C?mwIX``nKZV2=|2(Xlroa60{vR} zd=54Ckzd{4@1y#@1ohnv^*vKN!k+VKgf(%CQ`1;r%pn}*)#Wi$=o&^=^6yNB zm>!xGri1)Mgme(jCpp=$eF4b}Q?S>SbsA-VzkF7pP0cx)mm7zk;7cI?b>jAsX!!2HN_; z6#{x4t;GXX(x)}Dy>JK?bH6jr|2oo)(1T{>3n0zBt(!%^7E=D70cUEg05R=aftS*q zFcNS3X5_egS3`@xF$Ne~voG2&8szQ6ecs5E4~C457;_Eu2z@rRh?4tW>mK56Q(ubt zHkw!fr!_HdXLt+zO8AY!uW&PHd;isxLzW`DQ&DF{s*%2jQkHXk%Ajww&7V;A^MkT) zEZ@YX-6WviWQ1j!LM$Um-`&8rQW9H=)yUp^Cb5bCgzL7==(GL-nDblNkbbQ@Hr4NB12{s`Xf%#HjT_a69|P}cC# zcST?HMyTskR+Q%O)A$P*=sNt>(DMP(o-hYG>|VSfIO?NBfsXmN14{PYGC}s;l?=+h z%My6x2zN2Z@*eq^NPHr@3q8(!Oso!tto$dg68W>{h|JA8o@!2Y*QjyTZHVI^aWr z-iBZA$BJ7F6UY9tpkMbn?Pf}C4d2#MbRUCIW2kWEEa83VI#D>IRqQnkKA)Yj&y;3w zyLd%<4?~ZKOYTj{JS%)3c8E|h+58C%zgFwI=+ln{JZ#gf0d?89Hb-abJ_Kj4&Q^rw@I z{`*XY^D7fV$?bjFyoTDes~CB$`M!7mR-y}{%=`7nMPKxE=0v>*KQ0pO*@MQJ2W#Q| z;^Shalu_(Q#<%F%FXl3`0TJ-U@PWARci~~kuj^54)2rCMM)(>e_*%xCrqN{5_vzqH z@afQ*RP|u_-#}Q+xJTpasIj9B`0@vcD^~R;iB^nLc#ib$-b$x;2WyjiqfwsP6^XRT zu1I_23r1@+MK||FBB5_X&Wb$*^{D z4aeCixyObfBrk@qlgJlujG5Obu{>_Dc|jh_MQ*4F^zJ5$-9zsB&+gtI6#!0;E(q7d*|PS|1DOZ%8N zUVopkkg0d&U2NEi3iN`Uce)|ZOGb+BQf5KehCO(o5OO)3h?qOyjCvXObpX}ZptF%C zTcpfsV&|PBkaM&(s_6Us%C@|Xz*#oDvjNV@8Em+;McMml89n17e8UA?V1vk?29yHb z6`SMc`DG0%GoaVeLuc)|%BCg!7VYCKy_S8B2PTI}A<97d2Y1azK%MK@gHYB_u zw9v4)6D<|2Ft;&p(=mXHldRo5ntNl%h*GZ2>f&BLL^KV`in5jon5bPI$xFix)*xWM zyE_-Nad(5YfqBE2?{^*BSZa>9X+(HqBLcO*Isx+5LH>w^wl_EOE^52zzMq>^21{>* z9a-citMym$0*=fP_qc$B18)`n}lK855MF((gA+mZjx*{fqSLj6V53eu;`Uo3M zp9iNf+Pydy>QBv5e(KxxT3bL51zxP@%KQM~|5dC@kNR&}k-j>zq7Qil@H0k*=K3%I zrukd*Z^I?%RSVe_EeXXjYXUfdl!5;j??g$@@OX#7`OS~d6pL+}H z1Dp`X505tpr{7tC7O^mY_A-Mlz5&t~rUY-m98RMXS+x6BFwPDc&<4ve{d&h&@5!oGW}nkkF4T}gstaYyNWZDLZ?qKCX)DSx4ycHdtL#ou+Sgm~ zR^5(-*+{7!(q_|(D*P>5(H$){io!XwQ3sGpd=pCiQnM|UG7Ntx(;q#fK`g!n)@32x zDwGxqZ^OCpdocZyo*w*q>;SZ>MfVKqHAA7a!0*w!AqUVL<1Xn0;F*P^z;F-ReuO-E z1}nF-hvNJ@2$*aC2BK?!Jix0EKBDZ0b&Jw*K?_ZHPjRylya_?9`{o0qJ4{g%>vqG6 z50}us8=OBdPJ|E2;l60Tf-k>HXk}*+eAm`ifZB#j4&4Xfj3Rb@^8xyDPk=gA+$hAQ zEERh!#EzUXQ;hD=L~73dtgqoX^HW$~E4n9HZ?eT7`P-D3<*WOFLEIPp>~4VQZYaBj zew|l)Yi0c8L5qp36U?H=c6=tMs##YA2u zzXkJbl?nJx$yVOj)h<3?LxKHA+^4v%_AO_sRU4@bb(1`QD)|`tTXSd+G44QLYZya^imNEP-jE4pO7TsTW{G4PPD#SW* z&bYE@SPF?IuC#n@3Q@i3C1#9QLdOkQZ`v3t+E;b3@@vMDrLdoHtkE-~A|(swgoT2N zjTKngMDP<*yNuF$A+2yuE9}VjDOdYz`&sRxZ9@&k^l{dkk;T_;n-Xj7*>4?js$(l8i+8W#3O9a;BW_&Dom{qI>b`zuzwIuKUJU!MXiuk>wnIy*#0r0vm(#C;9@KkP zu<&mkDCI!O^l~h6=S&00nod@i?qUdMqdVq_>_@g!tEg*JJ_*&ETlMXqg4EAc zym~%1R?f=u33(FQnyZ|p?+%=$0N;m9HRE62FHX{kLn+!bXim?9IZert9W!BWS}0}* z#Pl~!^K&9^awe=ns^;>lm zY-50e9pGpo6HcL5QR=0vK&dkLjb$W3y(%LKqaVkWc1h}0q5~pVb#k=^^vKohoz;LHIrvluOp(53DnNMDIEyb$oVRKl4_c zK_gw!3pC4$GvPc8v4A`pVw9h<7Uicbpz}CgmUSMtLfF?_Ape)Drg8gayb<&3Ca(70 zsYWnE){H>^C5>RHb_6=sy^eXS&Y(K+PASTQ_es|i++D|m{*lLtw>pP3Pw2Kc)UE-% z>f6Z!l!ugn4*Y-iY|-N(l#cYCExg`sqE9=D1vTPsg>#Ei{N+fqxu;~#L{F6D`>~(ymSB&| zphw7lNS{sCLV*gF*``kBov7BM*O!I*wdfAjH$wg{`+b?93co+|9@eM9>Kwb&)OL|f z^KtL^>W#v3esHBP&9d572ehRi$ zLW|p>#U%`Xt1V_KE&ekwM&Mvh+#YDL|82DRilLE4XAwikK4D31>g-0{wFawR{6%|4PeTwLFtrz8S)*<(agSA+|Rh=BcN> z&1XVOa~b|tTbfaB$y!AAa4zxF*Y%PF-adhTu@9H9Ht6j*)RAHMTdiY3rMEA}Rd2KB zLtjrB4`?DBTkb1UeGO4x=R;WaHAH>AnS3Uuo-X(4aYMCS4!5#$AI~Anq1BX@O3DsD z#oG+Lu@$T2m{ZAdZe7`#eoB7x*{jpRE31+$Sn=7gXXdsl;7K)@AYQ zyqb1rRdSr?=kPXvFqp%f?SFZjK1loaOu)zyv(4x-O+fHR11@P6Wtq+uS~y@k>vVd5 zx;c3F38C`o$$?VMx|^7H+U9_EMS(ki?z7t1aP|bzueUNUdm`y~AH%|WW|c$Q03&oW zqBHZkO< zT&PxO)U_Hbw+j17wW^ghUw&A$=R zdOE(wL``o|^T9ju61?v;21O&vVkq=`3iUU_nb-3GM{SmrbQ*!{oK0hTu-c3Mh8S~n z^A(H3c+m5ggz;!iOiAod*TyWE@rF69J$fZC*^9$bhPn|ivxz0l=e8RMlU0Y3yBczE z4Jh!>Wv*<7@(y#R)s|58BPWEn0kKH-=6N-9h~K;DELWpdI$Cft^N08nl=^YJiP;Fa z#d&oEzwM`Cf%b+%JoQ*#BkH`J4f7fG{h%8G{mJ~;+5U@QbAvfveii)Aa0H>^(yAi4Gr-8GxQkQBG0bZU>nEx|Q(QaL;4BUuIdx(OGHeFw2{_S8&?z)9ZA=`s5sz6|<=Hya{Ov ze|Of@s;jg7x1~JPJAE$~`-rE!6Rii9)?r(~MeD$o7+<3|d>j3H3^TxgqkeaG;{jCr z`T#ca>aY>&RNH`k&=ax^ysNRVXBtWN1m2jsXsHxZT+%jU>Q&#v417z~A3d^nQH{%=_W6 zSAh3pIac*tHPLHTkDX!&WvGJ>I3;;8$uz3^+69OShCU=vLt+b_H?%VZ!w^tf^xH+6 z7p-h8UiPn{!oMPk~nMx}6q*0X$ z)Zam3O(>7_c*>1+`$mXTX>sz0T;J5742CV(u!WMb#WTyUdx#$0jJ7-`t>eU zx5I;!AGOhob~~1kqz&pGW2RWD#k;`rb1v>2WS$PV*cjraV`A3!LBz!y@eb$$On<&3 z$?yyBnI-es2>LC8sYs>!SW_?szC7(1y2FMV8GPCIbfR_v7wT<4^@40nqSX+x5#YBV zE2+vJJ@#>UXOeFEhIgX1dJBFHvI03eex4XTKPIr=qPq-Az0-Yt>O0=o|MS1v*QIy7 zuivQbYxTZ_SKiN}tZy@EfYa@0ZgWLrwQ4N_b*;&E%iwrLH@qh)nG?r6D2wxQRsVF} z3Z-LhPZIkI#FCT@{&!I?meIagT0`&bLK$sCnbH~F(}5D8CX`j-Eq4Qr*knlmq|x80 zj$bZvRR%&lq?-uq@M}3C^K<4mkhanMS6Ul^?*5qd9g_P3hs6N)_E=;a2W@G3Uk}mu z3bZ+)q3?=?@J+F44qwB&fgWN2rMvO&;t-bKZNuE*9mH}xSD=Ob*OfL+j*aZG#pu_f z!tWFF`^1Ywz1DYV{{hFpN9_X6JbsMwTm><-2VggFv}n#@XMRoX%tT-p4eyTmJ{XEH zn&>-%r>*Z8p8h%MIYDnGZHJG-S%LgYhL0w;kmV+{bQF;o>XJ&AS=pS8)X;v*={*Aa z;-IxppC(Y9By`aM?dO`1bM{~d99nU?ps^>zLC+gad9@Z0W zQ$rNe*S;-Q_!?dj6Su)vjOgcv!28T^;<#?uMz4LYhq0MWX0N%*5#Hw&{bP_W^Hq$( zK>y71t(5c`7qa0^QuLXbNnQY+z`RW^q?z=aKYb4B8~<%&Q$i?R=avb&&Ics-quadc z04UQ)zi6Gqq%ZIElSN8;n+_EHS_|tlr_+lX?~AJ6D04+k&kGrF;VFxH)vUPY*GXm% z;jN4$dz%gtR9c79Ur?pdHXD}S#vC)-rAkj@drcEd>(Ks52l@9*$i2;Hr|eVnhIXs^ zH52O9S>Z9o3Wy}7~ zgvoU!m1bm;4X=b5)aH_AWJMpcP6O?s$<7?ohs=>5O?AhQbNz3XxqferUEr|t^=ZQ_ z+ZPCYeYeHpb#j{n2{(p)-pO+}`Euk6RRA%-iNOD&{e`5;>m@d!&J}7SQM`KDLzEkY z3+Y(`y*F)|;19a4KW@1{`^l3o=Lzn;ezK{vsB-d_wf%Z>5ulaPuN}S|e=o^2deV}m z+aQsFtGVDEsxb49J~yno@%l-*?V3TLcM@FjB!-i^Q-xG?`8^x>u+ zc7Nt;@p+jKim9wGpf8#GwaI+RME$wlB0T#;<@*c!V*hL6xIA|=>CfYDmFtR87-d## zdX;uyf#XdJ;O>_uvjP0!DQx+qLHebT-l(JJ z6D;q4ixKB?QEwZb)*S0gx9UQAP+QTR2Dv?~gW~c{_->_H&#-*c<^I=X>ws4AzBskeV z=hIgaN2nVZ8eVj@7(J?!Qk?0dM|G(@i>?tPN2UGmUGUva-`=86h{91!sFI(AlG6Xa z7QTi5{b~5-D*wurqTnqMCune@YOR2GAFc7n@>Ns$WAPSUPde5c13p=9NP5icy^NJ}3o?>9`7o^pymG$fbcrz>&S`Ek*I!4CEf72C(b^MdS^yEh1D#kl*BWiuuF4OPlEQ`s8< zdw&M7_h&^x`^!pnaa_Evky z7S))~32*&P!t*{W#=Rd~b_RC*(C6t^9(A<70OdR3_lpAcw5rl{Z|Ji`Ndm<+1U2Qq z2(^3xuz(v%NG#=_k?>W`86{5^LH~LMelv{gOJY>s0^|BJjO!~fuK$E_eRa|?5uROl zGt~JdF`T~z+WfL`v~lmJ&~Ie+ByVRTyhS$fo;-NTuD`)b4I*cMr_x z*Pz{7q1~@TyWfCzzX|hsn-~p!OBBN27KMiIh(hCkP1=_=)R*1R)*fiN{r|3_FD@1x&Mns%fu<;l45) zp||m(z1{cir8sGn$84Jr6ZU=9s~DHz?P$^7ioV5Zk zZXAEd-CvS-S$xEK?6`>A)=rQS`cKOj%E7*e+4@Fhp9{HBStI%+8g-}vt&KUlX5 z)ByPhi*Dr?^nI4AzrdvYmxp%^M#qddYh&}^#!{=a0!|Qp3 zqc6zWe&|t-eprj{tT0+xSQyrr3hAuRI0Wih6k4SF5`JT^VeDICET$XY6KLIT2kxUI ztP{PrCxJkr3Go-In{q1UlMKD1m!>AaZk3Tqr&N&R%( z{e|VBB}UtYI?(vdUj(%5=>094(7505z>3jVm1cyL$&n5{2LM z!yCx1!R-dVZp5*yGgBJ<8e|3bY3yg}%W?mXNe12v`|An&>J+j*mO9DXc&Dh25Z9e- zvcbAaSl92ty58ll>uhDm238W+b&el`F~KUP0Xq6=6|>AAqi+{9TfV3Fd*6Y*_gB%N zl{>L+<>vV-r_xlp;L0@{WJmNDMSC9NE{W~;k`L|j3Mw9>yr0odqZj`!?1^~{?ZM(~ z_X(GNai=L?%`MDPH%;+JNSh$x`^!sdv_^l!o+})Z&=d|a>ij|b_STe6g|NxeKqvKY zW~i55%~$N8z3Mc_v|t}m7o?BRWCTUi&{MIGPk2g4{GeVP&JNl1n+Pd?u?{QSObyzJ z@8`-tB*GYC8}8S#HCPLz&m_-HRl3?TY?Az2yop(6Gqc1rX36QyvVc!K^LF8#b*JbH zg$YJNX!A|Sdr*%#T3_e_)*nWj-5+4XXWt>V^3HG*X$We}T$R$tb3e4M{tnQjxnEh+ zw>386DFnX}KVP&j8f8i+%nid%ji|2(Gml8wTlqZ5(-<93KWu$Jx|J`)5XaCjxcT0G z%Vhm6I_r-DX49Pb_|Q+Sn}5<5?IKJH)M?HM{nj1cdYAA%@I8SxG|i_iSZnhK=3h=X z9<*?G-vOu3JUE2##M<#KAE&47&_&EN&1orVt}>5qw>ENfr+JzA8Gftz5YE(g>)RI6 z$#I4j`**T<6zOUsz^lxqHFaPeY=%1PC`kqS6y^9D?w|(sC7k9y4N`Je$n9=quu{1> z^!3(jyREXe+w0c071lQ5m-`T{Z5-AV)-w$2*?<=5U_H;g6Da6D>nzqE!nNDZhR;!J z*Gv+8gISSgX2NdA^}Fc4Mvh@z!(Wa!NJkHW*z&M+jd9k^R-&Y=~`Ooc<|Du(0Xr&&&m8y}A%^|$F0KLZ1yO`+! zJ981r0+ygr6S*zi_ zhA_eFI>^x+N|2sGocb4hJJjU+y_-iA;>qm$LU|CG#(HfFT6{m?@Rv|l1Eo)9Kq;`h zNGI)Nc6Y^BLpZ>%m+j5!J`HC2d_c(O|AIQTf5-G1{ZOy<2fRN_x23mq3w39X7TU(N z?~8o=`+OyblStwhz8cO9y_YTIKPJyj`0{%`^s28Z#)fZ<0X_L|@XJL%FTgKK-;ZXg z^%#>{U(Iu{pSF(Z}m_G(Rj*^vu&oO5@+Lv;;c@v+h^a}bSuz#Zl)k8E9 zw0TfNW3=%5JH_a;cZtGN-xK{!5x}htkPqnar*0QLH|Qw!gfD^#u3$Ig^DdVEJzA$@ zIFsyw-p4DJ@cc8*8@!KKZ58(M@uPlX^-fb~oYL*pEBNqTq^D>SB>@zfM7%ZI-y4~L zeK@?C!Y}M+zk#;zFy{h%x5l$}6YWI9e@)d%d$kVo?9_<`(k;^Xq1TKXYqU(q<2Y{TGbL-LX+~OqNdxn9;eRM9%BBL_5AVbiZK@(5aOm`!z-dZxcdp^t9EROj@|f(Pse)nN+AI}Lp+qw)X5YNp>LXc{bbyCBH*6@ zcbo7jW1vHkdIJoF=UIDLDE;I=RBfwN=^(5}3)r&5dNiL8DAWF1+-bK8SSO-<+#Uj&zEg|qW9|nhKuj9mjJ!! zWfX=}H>-f*hJRuuo2g#FaIFEH@@>K?h)-Zghg*R9m|2HcqCQ@kUV~T62w)Z;gLu~g zUb$Z3m6u`P_gjQlE(N@D*; zX%-NqDcRJFa+$W!N5jKc-671o%=3sQJHh;ok8?tOA=t0+Y36pmyf@Au$7SaEmIT^O zgM5EM9Hwv%V47zv2|d?r#D+w%LXN+m9(sW2Hyd_GB=q=h#7mEdin$nk*ZWDNdnW!v z5$9}zpQ!@>ktm2CijsY9lKH-9d5u54`yl-uQIPkFpp0~)&&0Yn)$T>fUgq`QQ}HaP zLFnGf&M$cOmIVW1ONb=@l1;-5ihciE!!0pO?!1b}irE&R&4?@xw_*T-{vp zyezsONuvA^LQ;j&40*)4nhNDAK2d|ZduT0tE{7cUdDJhYP2+X#Ekb+@EnvM^Tc4N# z?Mw^wLA8za)JMn$q0>}!KTcn%kn*tJ2YiH?!FLpB0kU1Hl9DOB{gGsn{tvRaM7#Xe zS%?wd26|4!MYX-^c;l1Gh0Rb|E*!jv#8Tt#CCNmckKqXMUyYRB&iuK0#2%G}%w5;fgmj2ia!WB4AQWjVfE z{EuWat}?Wr)CmXuW!(OorDTJsfB(UxRs-+NmDfaB9xcBY^6}WtWQW3IuSI=74O(C< zbHxh)XE2j6S0XT1e#qU8oG|Qg^gAA0XNzFkR4@%~BCcv5hq>1@_boA1zU{t@vFKh5ZDI<}>eTacaZ=HS zW@X>lgyZ%CMa{|^EFe;DxpF9HAms>ZizxxRx5m*%^FA+q*D=5;?5&~E`MJM(Zr zv+Q6|{~oQmyAnYfZQUbP%j-PLXEQJV zNX-d~l%ul94CjUSC{RtIP%qi|{7FN`_ro~ZIsa>D`*CRdiT$+w_=L6}pR{eydjcre zpWwTHk`2|i9mHpZn*eIJ*thw1xohpx2We)T)&yD}ijW)`rBOWt09j2jC42gFtcE7; zBKh-uH2+)d$Nb+<5p|5`7wY0Fy^;Cm7W+q}my6P^COR))+PB62A;!_##eF{~LEABj znme)bdqTu>(*v*n)U3$LJ0wTL*%(xK@5MOVpN>bBK5xUZyC~@@y61M7FbgZ;pmUm5 z0{UGE#f$dU5F6Ha53PiQwP4m_x97ysGk)Adg;?CwLa5XzW*Y zC@hv_?z%3mkIe?`*9D_}siE>#)G6ALPThxeymx8rBy56rZfXBG$r}FHK6hZNJA6vK%^hC@84A!M#+uY~b9csH9Uq(QE ztI3{#PPMI8HaT7gVe=r^N<*f_W&SItXF9q`c2ZlPx7nTXR+N3~VS>bl=VrZoq=&+)jl9(RXTD4+4sHc41oT?v2 z2s4eVFJEJsq3s)u{N}ZitQYUXKh6)X^N);l4)!5KHpG0|jh_XzJSI?bS4#g%bW;w* zi+InBy+m#vdMQ*d1@#is<3g*$Db+baUtqWM3_wB*^<%jpOYgI!x>Ik25q*q2-eu^v zuIgQ;tmnxqc(Z8#Cns7Rdc{e%EW%Nnwd6kQdy-PVfN{K`y73ND`M(I9A@ti&OfQ#d z-YA3p^wOX7*Ud{`Q&}^w=Ng#FFF+q3*KlU~$>SkH^s*kjS!e>PtH+)ewDe>DRnRD5 zU0hnHblKXEe}`F}tLZg!h4-f4gtOW3hl>qs&mg$VK?7tvy|o8ss_BPNd1*U?j0TW1V85{^{d)aeY)oNyUg3y z^QTpeQH`4{Ur$ zf54sYSq*8zo$7oa&z;#IGGQ5$wfdsv@_dr=ZdohNiHTF)FYyHJqlr4uCHsr8H`>`v zyktKVMhoN5055hjjB%H+A@r<>){Mub@!ZDIW62$Yv3gk?`B`_L6=NJdK72}`kNR)% z46E05MLlTOJ(FX9O?NIklW(z)4$+DWlsFks|9qMmd^b?EXG=!-q>*{fbHd+|02iH7 z@utUyP!oMLgq}Zx?*K{e;QppUyLpM{fGS)N>Lw~N3Sme~=X$xs6l@3gYU<^h-W*^pD z_2VLH=tZTU7_7Ul|MZ9y&>+?0oDC~1l`^ICZOk?qp-K)Hx0Jib@s!5*L>IFJM_)aw zVJl%N9XV_&qeFWz+pZtr1oK#sKkx!M!#yTeM z&%FJ65t~#G{kK!-r$0YM{O_iSe^HcuDV4`?B@5be3+nej;J=^n#(pcxwk&Vt<+$f7 zai6Kg{jL&s8Lxd2pe)1T9h`T<3&Qu(A+wo2I3@f2lY~-~&kmqSyG%#(^XXY{Hfz<@ ziL;LAvO&5d=(EP%Ymg7tRZ6S=gr7%g6}8GGe%(aR|DctB$@fGQ9OrW1a%X<*_jNBB z>%A6DoX;18@&&C|=JU|XIWulQ80P-XLxKNRU|3Yb&r?`d!oQ=i=6g3P@E3%`NBHjr z_S6%<1*k63%sx<_ZBbo;YTWPYUSbsZi=s@|RqrCa+)J<<{vh%Le}oA>6HC!Ag$dpWIaj!U;QZG;=T~dSKhfr^ftgLl4vGQ{{0kve&7^+ zznA)M251A+u1Ks)9G?L?D>0lnY0t)(jvQkmpH0~8P@(ffrNJ{9lN}1&-Jynodl?QJJ}I8e1ARJq{NJXCe_bd!hEby%UcY~z0m%4^7!iL3sQ#N6)&4F<^w&jnit!X+ zCyj`I2;@DhbNgZ1H{S^v#5EPutEJA7PdEjj{02z*FH8yeN?nQ??5s)V(0`oNWuxv5 zUk819B82y&V=#bm_uO7MOWenSk8L!3&ehD0&t~oBG!wDpbUGVnnkDy;UXzu}pf!jm zL)%CO02IICA)j{ixZbXR9Lg%pXtGxRb2tJ?=7WnB3xrasN^n@X#I$4 z3HTnmAYS%8bViR+_A^w;9Rf%$Ya@NK<}51OcZOuZ)7%4Pd<-~xX9X)GzAC!o{z~1= z@a?M7SNfpQ4D?H%F^4&?_RMHyi0LvG%()h4`6S>G2~>UZ4ZW+IFN@IGntWApxv_4h69aZsT5^|?s2ur<9!`9oi^MOve z2RQFy`j4R|C>0THT9;Vs`;yy8vIU)Nf}mEt;I~AMVb_qxj8=1Br1(Yj(Jn|gac?Nc z8cr+JDM zK|l1ym)euJonmd}w}*go(AH{ZqhpyJcn7}Ke41ng=8{zE|3;l#ji;!-)ZV`Ehu9YT z78!=Uyv#==^wo|}c=#{%@U8YTKZg@uh)a|?Z+ z1^c(vI+eaZ%)-_d`|DVHs1HsS=k?5GA)u4~6YGzNrU>48H!+sETE(7%u{Om5tKD-I z-f4UlT5X7or=JlIMjIpMlc_Mq9qY$E0CB0mX0B1?&%*L?D6cm~F6B+}OL=Bj1EoMu zLOtKsS(C%Db_aD)KFH1Mwi^$Gq6F1fu+%MPcOUG4E%r^&_K%Vis-*C^Yyi^yW7 zBTDIChI&Q3oL@T4J%bScOgrpnOp^fD`0f0eLRwsM-{&FnQ48yQ!Y=gXiFgO)>rw-S zo3YW;t5Z(lS-XX3Rz=(OS@^9h?K7ZXhkLvIo7l20P~PO;V^yF)qnv(S9i;$?q)V zq9Qxe>SQ;HUgUCW`c}$<5OT8jX<_2|rSzBqT)mJ;585Put*50;s6&$lIR6WpA%k~e z<<`iye_E4U?ALnB(h09ym+j&bfaqsKC{KMwOVAjYZ%Y8*5ShdW*5AQJpgjxP3qgBf zSrJ>ZYMM2Ol}{L(>Lv=@NBcH#JfuLg;4v*%JQTK`W|ET%8YVvP~z zB~*y}a!#~;V*B>S1@yClCCKNd>EE`DA-tF)0GB;kgyt;#Z?xJ&M?uU1*$`_F51II; zes&hlvWAavbGP|D^K$bS=2r72^P=tM^C6Uvy&SroVIQ%EHpm%{^hfZWz=2RhV+8wS zvUp@H5^6o~sbab{8{rL+E$M@^d!r3Zi}+=j@+DPU2KQ>Wh_L0TdGLIDnJZD%jQ_uu<&w~=bXWsg0GVe9ZQu+<8TPr{srWfu1fswZJ7a$!&{~)Qj=Q)t?_mt0; z`JuSnofv`t9)ui;W9nx3?X8C~rC-*P2GYfU*N&$dj2JLeh9q5L9Lpg!?;X`xKF+C(&3koom3(65=Yrc4E-j3EQH4a|nrzatmrr+NdkAf~8165D^H6bz$;3VlEJ ziE6I**X4Tuq`6M5%XMm9F4doD(4PfNl{lrY#3_^3ds0$S&gEPuC6#~BZOM%Pp0Av9 zV_kh4slMQBv_R`K{MP@yuHJu7suTT9P1W00DHRWtdS6|s_xYv1*IVD466Nd{=o5%? z>llZ>eR@k>uKFBB_ed>I_o`T5j43^}dOm)RoSeUJqxe`*7AwlKSfDHbx|(DNcnN_1 zZO%!~(axdh0}%O&rU=Z?1KU{A-E4W!R3QX7@C^2IE&NmQ@2`(G>r6VHBzF4p@&@E7Bs5(_t(casQ6RsO(0{x}_nRWd$>iVb8XXm^b!9mHDyknvdjh!P$6LNCKlC{zqF?ODQ~OI^J>bB`(@6YqD{b%i8(dp z@2Dy7pDW}^v$lMyMb!YXoM_rl4GI&ao($%=yCz3z$~IIBt z-<8afWNvAatkAfvlJo=rSxC;3g^t;Bq;rlOnTOWBC(?xN6KKT<#V4f89+c#%629lc zclF(P?L9xHZ*kw9bbZ}{$Iexs`5cy z?n-)kUDB0}q`znc$~RZ;jAxVnmFFg9F}E_A_E6WxbFt<%erU3O747*IcnR7`Y9OAY zDnpqo@$IcE>-8iMuH5vqvLAXvi9vqCCzrjtj@Mzl+rq-vj2P;FS(6jlnZo9jEzsw0UCFI6fWxk1=|P_PM8x` zIz0D<%P=){o_pR#o_oVp*sQ->d?;Lg>r<=K^l;d&yC){Q&Tbd%!3R-KfbX`8ZYvP@ zs8_7KO+HrVb+S3&brSW8Nr#yG`o(0K1h7}d&U7uzr2ys@OaXH#Si2?rfw}thD$G$j z+R1I7FIRKH%kRK~y7TS)ZlhJa;g;MR;DqSnvd+e2JA-tt(v_XXdbmsN2kx+M0|a;V zZ&t8h=*`AqlffON*@IKSUB-vID*)~eAh^p&jE$4`*)m=@i)8ryVGCBhKO7?Id8)B! z&+7@pcPYIzd@~OVp5hKaZwX4s*^`{_%U`iTdRKPK#7bvc?_dwZu(PtsuvqU2AqwTM zTp+*g?e0yP80sC=h{N-)=$78q=<9TK_&rS3uw09(uf^j>@9dG9cjbJU*o5DPmcMj? z98WI~pTO`dieX1yULjpbfHmC9 zODZq^V_Z(K{j$AI=RR7|xi7ja!<^)sf7*u{tEi)A1fXgm*(ODwn=$4N9c(&e?{=E-PoV?xQ^%R3)sllgT}$E&D~8{=NSTRH%5URcPm zSc=jU;jO1yg+EJD@GRP~@VeznO_TjvBYZ;+`i30R*Eknq-x9n9SO@t4k&(X4I><-g zR1@S#z5FDT`(hLHZc!r|cO&YpppBGyJqR7R7nO!)@Q!HhBx9fvnDrwlx*a`>NUxzf zlIfL^^lY^&Bf*@j{d**TL@%llO|Oior({<~g!v8sU4TEb7oRj>WCjapb*Q&|SUx`l z{YBk<$6_l1Aa)PZ?bPcrIhp*ZitlUB0%)5k1LX^@jL$wsZ``S0X8w3;r)g0)^m`NF zjpG47oS-nu3^`^llm&<#GY^2@`Eq1zflQUW;{g-J5mzlU$A@Ur0)q!-#1Px`(js|Bmh|QQO=_! z_f$ApoA}wVtH()`F`t3nBxbSYfM;68HeS|=UqN0|nI=<`eYAr&aWp`bql_ z;F1Gea)3)dU#2vKD;)0#Um(kRy5)80Bwa#)P?lYnpf6lWEa9>IDu6+>PP?i*u(s)} zw@R%wt#lT1;f}D$XIj{|l30ERl_)vfX?J9k7G};gJmGsbB-w0sC7;7K7-^YZJ%f#D z2g|jZCD)pkzGtL&zRA{dE3`Kh+LwCcWb0tL!A#5DM{k1vZ7elEVz#j^6Y5V`SU_#+o% z4CWkS$6(zG0J{zwNvpXwX)e@!ob11^bDSm#^RVbZHd{jPC62#OORzEHU|Bc{aj3y@ z7vSH?kOpBfS6gb~Ujgv#T4o6N<2ZkN=52!i$ep*zR3>7y$u7eg4Ay<1U-yBN)P3N7 z>OP3-KB!!`rs_^^fP8?1lP7Jqu)e4dzv$hlkA89f4kmjnqV64b#*UChM8x;@BySOU z9k1~yEWx;a49T}2gYWWtMHaY2-K%N)9JVMoja|x__6+RKl|u4t-k_bz?bK_F)%QN$ zoccqIKPlNhJSRedHyC)=iFO&Go((gx9s}!HC3N1c33I7dsq58lLzv4AzrN|I7oa{J z>eDCfyA|lW74zSBvEWQ=q z`nV!nrzepk8o&aac3=XrR+6Rqs@8_@$f!3Q7JLu&plzFFyk&wl;wE~peFUx(U(PL> zfudU=i>6qo1d2&vQc1qQl{Ej4B&ARNsJ1^b!cXTw8scMo;iPbJ!Cfp1$wierZ5g1a zz4T(>O?LDsj|DR!ya@Ij#+Cgy>>~dSi{UizGAb`gI@4$Opl#cUJZXXWoT=i2z8+g> zuCp7a11#w5JzV3c!_t#5C^uRopcY~5PQ?e04BW}1|MgStWRH6Lx{G^>CD6YuOO$@& zGONIsNH4Jz;?D8oU@!5d67{Cq`Q=8*y(Giwb{^l!p{~cZky&-;OPF+M`z4-rCA$cx zLf&2`VYG>BdJUzWM0R?X)t=icmf^WQdy;c|U>Tg- zT@%jjO~98l00eC7ab=TOPWdtZ6y#S#W*~T;uMVE)dnZ57_4=`Ip+FWxC=rqNAan+{|TOCe?{#87ys0Cg0gcUZ$7PTv2ZZ&>qQ*!1}m zAy&hjJcDEK#vo@+Tm&JP zax~xXpSjh!Mm?kahGmlMYx^^SClo*@?`9@n#?UU^$>Ht0U=}wZ3^!7K>{}v^ubI>= z2ICS8ebK%1*{UBm;>nQ>%ly7q$Ba5u`AebQ%b@1VVcg_{JFB&@)rQcARgnvciY$=V2JRbj_`=mk9wad zr^ai2&YU5tK4*p|`1et?wAwwRWNXkPACt@BeE3}NI{&p~e$}AF-j2X;8|tp-R!W)? z_-)gQ?sl|}rrtX1aea=KU$KIqbp(FB6;N0D^Swi4`5Si7fC}e%Dx4p9mn@}EhtgrW zJ2L{IHVv(GIHEYTHQb@cd4AO)(38_3M;u?NXkEJc->%87RKDe=E!_Hr^W=o`Lya6%rf6?k3h&vt6t~y zMzTkd@Ah-RnY|}50--j5O9S6k3~voLY588&??LQ0d6jL~pvU?>)MJlzY3f`__;kBE z*E2QxQ?&j(&dq?XCCY5(82Jr@uuE3T-8R~039s`Ay|O2xHL^AX&-gYY=nM3a z8XH!#Dn2fjYc?B!S!mZfO@~e6xkDVMl)JH4OB8yS1EjZWcw4j6#TypQpAUV)yJ7{O zYEHJ2|I>W#U2+MmFTtpNlW!FSc0a`TvqAb@yl#12I#2>VD(17jL0;DPw>POQo*>oz zLa)QhaM}!Tx`*I2KQI922EyzBz%0OPervdwr}m(?RD7!$d_zLA0*;hv@K*Jey0?Ah zmz@f}Ir-hfvi6A5SDmD<(+MV&)%^LU zH*lClxZre$^CP8WoW3KR;i>1nRjM9*U6WY{YcLJgK#%D`zn>_daC7rbW$_>eyerh1 zR&{E0>;G-MlVMAh^s@Uf)PaSy;R0dvN4@lhz&$FQV_^+-^8Ym%`uP)N=o9bU?ws__ zt&wDm)p_c#lXvfLE#66*8Gze^i1wzNc zq~`UY{lI=5&mtAZ^|{U4JxEgUU&ki7tFE>ctK(A)|85KW$tJni3XWmoo!F;=cREa# z-0Q-&@B69tPV6ule8*UOw}pNBVR$m1GjDfJgRr93bB*-jO)Lpm1CjN%2{51ieUkZ& zyWb60br1d(*jY0v>;&72Pv}#~58n=9gjQ$5UFO98{b15N&x!edRLQ5;;Ycr6?JL3v zz7a>et=`}of-lL@G6{M~Q1B#)T2XdeC)deXQv*-+aN)UYNEiL?u(CTJyiX3Kr|$}* z6_vOQ;&f%h=#zjcAde`e&jc(!`91%d{lM0m3Ty>&BkKPT=Z*ke-Ob!}0i30)vr(rr z@kp5;Tubwk;poHjD8gUpuWA}$Eb?%XtL91zoc*KxH;9rbT4l{(eslTEW0Rb1YvD9F zyyk2R-d&;1o#A!ZSM*~9tqrY}=owj^YTgjUtcRFpjOo@IIl&-P>qjt&b|)!>w@kOW zG2c_5>XYrCebx4+6aRb!@g80pYVQuV7oSl2Ez3Gnmz^kkxV|EL2*S!VI$N<`g>8vY(=MxXjM^}@a5$&#o$HNc7XWz#q)imhfV9bH0`ax_U)4TNqdtB%tj?bX zT018WbTj;pCXSG3xiUyo1Z6Pf2g^A!KvNu1p(pSrZNxcTI)55**2?H4bj1-wS5(GM zlmoV|C<}lf_i+FFaH2AfkpC)O@%C}+I@CMgFK&J7^ZF~3oY(bub=}*@a(z@p8Z$gV2gWiZv_tEbX78dYRhvc(S4Xf zx(}%H5Y&C>>BiTxdwad|t4M+sT>A#*OOwT|k+xltwt9UK)MpYteH_qV0{S>y(N5Un z{v3Ft)N6iTk#VbVAGG(pz^_kIefO)fz<+W2{S?`!Kz}b-Z`r1K2fg3;)4nbCbr6^O zgI``|(rE7q+K@3h(QekS|H1(kzOa~ zb?82OSY{Iu=4Cv&8fKGhcQ(f~^`KGa%|)GUFFbda1I|jeZ?+1KhbIL3dShlYN+tyB67_duWx3nu;WT*4KS%2GC|h^! z>{iIr(o;QaM2%h3a-MPfB;RZC%pQ9}UZqd2!rRwiDhMzlkH> zSj^^{H}RtVB6$kIUo)sPb;793cB5_TUx%mD%c>{wS3~;|iy3lV4Xj^B`|VFdSo!3M zkv@!9t6B9pVjXvUfr(z?=b8)5a*MdH-%g8YO*Ggd;>fpdQR#Bc_2npYQBwx+-SSnliO2dn zQ&ISaT)O0|HBArbP5nV>8A09+$NG9xkavS$BW&b=?$jU3x>MCx--y#u_sJGvg3sAN zbDi(gT&!Y4;IfGB(_r;FS4I1mbvjqY^j=@*DipxA>nE89ngwgJS-`bfT&H){QkjjO z3!R$Tz})Yy)xCN_%}PsUR(f_iHM4?c%v$}c7oPk-yuAs06jky7{9eC4=IEL9bP{q9 zNKYn#K@NvW0tt}m009p~Aq*gf`%v*15=1~jK|D~`17vl*7gP`h6i~!lR}|J`UGK&F z*!5a(cXj`JC|}ikJu^L%0PcR@@5}F(>F#&dt5;R;s#m1}cC=i3yitBWF_paqWhBS9 z;cZ+sNX%~aY6Th1sETX6hk6yDCq*gxqghzb3^H1#E`2bCe5f)CDHxNY-~8_lhGPgT0DetTi2Rcd!P;8-K)1R#&+&k6e;>8 z>Wp>P0h`K%Za>Spr|<#hg8!t|#?Q!-;Wmb+EulPpF)>$a6tl}2~z z*`QsV9%@A_w+a3?Azhnp*yif)FN_34TshBpoxedmPzxd82 zt#?jkwF@Jp$q)0xJAvBTR@M$0oV*k28^5x)VQ_t$P4+WC#kjRz#osXn;&*@G2i)9_ zbmFCWy7ORRv~QJPaD|`r_Sd%oP2GMH+pjt~J&^Onm9=wrCjsUUm`anI;Hh~i>a7j! z#zUz>O&H@K2YhWGj&F2A>lT1-r$VOOJ{5ORU3KKo%TbPp`JCL}3FlGAhP3XwYkoUF zUjjT+)KNwb^>Vwv869N_dGs#H$6#s}p{s^S1>^%Clmg zi;}-?bM%$F6=CnsBT=o&Cote6y?ymk50YF9^2RoP)-=}dqpdeiW!Um5 z@HBlPpBoO+g`V!8Tza~H_6eWr!vBL?H*W%;`+e4>Zr;>`o$<$E919=W>5TuqE_CzK zXZh|k|Mw4(j*o9I9bSj8ATz(2O@JQ_;70=d2vld1DIil0r-ui5DC7Zo-A3EE9^PLZ zJ-n$I-LN#B_IG4!a{Ng+ADo5u4xrCl1r5z3t&^s*CKYChllYi9Ze{JjLCHzj|Ag~q zd=S!3n5U~%xd$v&^qoq2tGRl4lMbSnS3@euHC&r+3acMoMrO+=X0+)((7bfVUjb$cU+IHiKRmd6Lkd7zsVcri`4*rK}-g`e8(P3v-Y4Zk@f; zy3pCXhU?Xx=;+m*$l9PEa`oy?%+sqo$)#5}h3nN#If%}lD0`Aq_M|S#o^*(^C-br= zcd4^?5__U>>XT>X%kI`XW)%eM`sDjq%&a5oSCP`H1mJZW18;h)%=_5 zG0kEHUFaFP(<_VAeW%#>Xx9-&0>w4w68cUvV1+e{>$e-s(RZ?DI{Gow zKvoKUrWv}}etS~kE}b7$me z+02BHnJz7x8LSPU!xGXuNi%rKLMLgKOaBOR&W4mZVY%&SJ!O`olQiofI!OTa_?ZXM zNt(r`woYeV*)UI8f9EIB?miG}pIN{sMg~K;PYLT1I*5A~|G~G|gL+ES9X%ze8{kdr zDgB%4DP_abdP@H*2J>+t^ppf1y!m=cE1}*CpyX9EJLxG+%jhY!XjC3^Fg>LUr?V*+ z&pL>1zwM_P8|L{kjrxU5bKmb1^WmU^R&3E9;%s_43(+ciC-D2+Ubs^f=F&Icrcfkw zyeC9EpGT%F;umu`l4Dbr#{mR}B;q>flQQ{!$-Y@2Z{I9sTvQ`=%S`7!Z|=TKHZ5A! zytF3H&)u@Rti3a7&?~VHa_er|(R^J^Jc&L!J%04^HB&(wNKl3X@e0JpuC0m7BEE)% zlq%_NSeM{eoP?y#`_yT>u(KK3gjF*>iaXc6g)ULAuMz%1eWGs7sau11Z42#~^cx2@ zpT9Q=X;sn|UbpWsb2#K&cv&E zd)4W^by#z8i$BgzvV_m9&8A9aD@~4=$8hH)IdL9qP=ef!&^(4;DeJ}>x6PogVYurs zFm5|c{HDXi-+h?)I}a1Tfkojx6#xdv%s`M`C4KQSKKcXmtD-);c;+{T*8G z?de3~$MVm*s?y&4icdgdd*?ugD3X zk_qpT6Fxc<-ZLkBd?wt=2|p$i9?l6*X2Ppn;cmU-$r%ea5lqpg&7N}Flqsi(m(xJY ziD`BiU%*Ps#~zHo&!hvp26h<5{%jvN(60|<*A3B6%jrYi@-5Q1*D~JBzK8kk6k{%H zGv~2<-zsXF@2#6_tS)U5VBC&F#NBX+xO-|W5uKxVh1hvmjANcEl}5Td0#4lCw6&)0T?y{MFDf~_=NCt4A9JUxDc_jNkY zC3e=}T;gQbRa;JhwhTIGTRPkGIKpq_`SeZeTz3`b_Io743TWp!%c;)(JL{C+t)F1! z**U`A^MQ1{2WCS9papH#sVrKM^ zn)#VI&3uMmcn)%~IgJ?8=ex#qNbl%c6_A6?i3^-L@qK(weCRay^E93DeMTo6P8{Fd z;v&fztE$MIwB7ibTWUU?Rgul`b%1}J#)4hU3(`7CZBR$r7nYQ_x0+qSa1Y81*D!7L zj85{VTc$j;CpsJIk4s!1Luxb6$ecOP>y?veE1A##5Z^pA!~b2!&&b4grqR*WNTX-6 zuG)fi&+%J%aXu%m!wC4feb3mmPHD3FXCESN>LKE$`-N?ze7|Iq{b?On>blRmp5orZ zvm`=>czW?t=93imI>_E<)4s=czuZu=dwk;plMR9AkUewn9`diRz8KPaOpl@PJ#>M2 z;m`qV)(?Fy`MaU>%03$U?k;(lHluXdZ@2Uxw&|vpVcn0MHtgqlONO<-c65t?8L_Vhkf(xo?%V>UK@7#Reu?F^;16#>-87b^!^EfrW+pV*3{bDYT7gRh^D&R z>YDC&KhgB<#m6+2UYl&{9+=rQvf}ins-G4&kp&kty|-?4(<2XF*>wH8>zc-&eq+gYI@=8XPaIud$}ob&ij6+F{6(^@%`|E#3d&cCdOS^k|=+&d*b8oD-)mC)rp>WMiZ5P z@0Xa|HZZaGo%%%m^dSj=EphC!k%@1+9i6yt=W&U%P92{(q35K;oUczxG~Y2Jarsqq z6Sq#EpZNUfRN}O;XC-zGUYZy*?7YO1{ud-3y!XOHk$p+xinlLKe0JKe5;L@`65nrM z1L@W!e){p+#MW)sC+x{LCB6#Wn%MpF`ozhX-kyjZw<+<@g1Zv$f3PL-^p1NHcdy!! zxO&3&kZYb#EWG?hNc(c)r`4}P zyZ)58{hGHD=Eipu^X~p2@#>?0PK@~DCy5un{yZ@$_*LSA{@(%&e@htW{+QUc>7R+V zSO1eh(+(fpOzqz_GJC@tvc2jo)&91d$DaPM*M4D|-yTW>_Mk06J3i5{2OJ35N8D9t z-#?|;Zt|7b`yMW}-|Hy1Ppzu3SG?K7{>_?7d)V<|`$K=k{=cWH?Y^sf*)O$3ZRS0~ z-n_T3ed^l&_DvIyw5M7F?W_M1x8L1WXWz1NkUf1&gT1w4i2bjxhT3mD(_~lw#Zas6@jr1OrqkDoox9(7c!-PA8>KUFfxe&|1w z?H9hDVvm2T&7S+hG<(V8GwjQ^&$4g6ZI0b^(>(jVb*I?+y7~6jU!4wcoC&ZluqRyC zVHezdmi_#Ov+bgLmOz`&u?PKOnSIkI=h?70vGex=W&;PcTa)-M(*GMiTyO|J{MT2f z52;(ZdkDM_UH*M+D0~kE-WvK<;PIh7@BD1&btC=5mY!QP?78IdVgERL<}l!uVUI3a zH|*AL?i@B~*khdUc0BRruw$38rn62BaejNoiZy-xMRU`Om$o*Im^rWM4DUHjQs320 zM+~{9>84L^Y5MfvcQt+S(F08lr##&>?6FsxDwcoPbf5lR)5_f>QQX6ucvLYHo~G`J zBj2q~{QLOyLRk2)izG_+HXwK?UhFt*unm${r8`W?8kps!fEd>MLp~n@2-UK zD!cBsYM{&B_N~+V*d1H@LO=Gm?<$PhH`m5(I=0S!tX0rjN7E3X*l z)o`Hyk@lFsw%89{IokGDA8o&M-!b;NgT~mv`*wBoc%YXP?B(B&vtJ$C3N$kT(kAWG z`%bcdo;TT+ZamRGci$BI^-oW-2YRO32g1|rodc%ZbBE5bFB?A7UN;2juy(dx+G~!j znsWjEx%S?7=Giwqax$mOYv-M6KOUQJpY+3gpz+gew)Av6H0TUl{`3s{$KRZ3w~a{I zPkx!=H2XpScDv8>?e@pBI_wSq*I~bS=|X#fc^0SRaOEPv!6M+9vw`N%w(CNRfxi~p z+P91C_8Cj;F~478_a3;^K6~9#d(RI`?F+}BV~^Z+j(xUtuDyBkx%P3J&b7b$`?>aY zBbNc6EVK8#y3Bs7`*M5kwB^8e%k9tJTy9Sao@cinbDsUgdFR>vcb;blJ~+?*DsaC2 zhoR@&)|~Tgvi5xY=^f|WC2yW@zx~hiZL?^F{inJWcJPE1cFX(~_Sef-0DrHro9|d* zf4+MK;D3c}y|Tg{`u+-g@|P>@kH24GFZ`$YM;`2&4;TD@!iVj7e7N_WT{yNi?J8c@ z_oqk#;-n)5Z(^?l-_6aN8m|K|Mgw@S%=E-u@* zjZ%S*J@ysH`t1HAb=$5F+Jno5e7^qOLi>|@itW0UCH4=;mf6vQ?zX+R0%T@SpdHJ8 z=TBjK{{<1Cks8~-s~40LwIgr$u}_-Y7wD}Y^x**LizDslk^}AM_QXNH*4g*|y59cv zkAv(l$2Zu!HZ|HS{yoHg_?Tfpn@!Nq38=f-p4>Lvo_h5Nd)A(j_R0TfvEQv8ZSNa% zlwEbk(f0XQ9Am$=^;o<7$uU4f#{plCwLx}3-;T3u)baMCN~=9VnP5-*c>?53+8=#B z(SGUmNkFfY?XBBR1i3xMK4a-gHdJC?c;r<3_u4d|yJ8HHP0@xPX-=1+5YGHQ=q-40_~q_-+04(kOQaL55Fb& zZEW!wwrA@Z_R}NIw7-AlOu$15U`zqMF0ijs+wJw2wcGdU9riO`R_qWPj6eHXlzm`4+=ix)|EA*zVD=#6JDTC3fE*mjDiz+CA@F zYLEMm;J;m)&H=tZ$NqWbxpwgt=i2>VJJ%jru?+fSnf>RD%j`2hT?Vphx&7Uo<@Q&% zF1OoW6+HO#i1X|_+RwAijpqTp=h?52^FdCXZ!bRKeEZqO=iA+HJ>UM|@$>CF-ap@- zPgdCd!z(}@t$^`Y@Zqux1s}e6x8TETo?l_#v;V*4!}bgxy4Q0<`TpEWyFXQkut{i= z0q{PIzbBhJSeV~qT17Sk)2=4T;SdsnHTBOOmY-X$Sw&k%EM%K0mG%|44qwQgEygr0 zl#=9#4t@sLB1tSc62f4nyieM!DAL~X1vK}}IOOu<(7}@MAFe{}yH!;P-LuvdV__$o zuDL#$4QS(8utqt$I>vp?;wtxESmh4%$8ZPHu`8Rq-dp7OamcPa3iAAf^D>*qR>zX) z57^{Bf%DfXBF%Bt2eXUI<6}ovr`JK9&z6g1v6h(+DRa*?{4U=pJE1ir{ivC}$iYSK zx`x+d1f6xwvDICzPXsI{93t-cL&S|aMBFje=`~NTj=(8?Leghto!8Z!!i<7nmadDt zqv<`1vsthUUn7e-&Xhc#$jR6e)(D?MaC9&NgESYcm$-*)_`Q+lPd{ zz4cy1_--#^2M(+_uq$5R=vqjbyTfzHx!h*4X;jc50RIFlWo?V&e#3majLnAsl=T3# zKQIGJ^Zw3!6hMHp0GbLsG#BIY{RFlyrNF~wa4r{qzB2oSnzR)!nP0r*rc^>e>V9pC( zxm;>-@xpT8h2;(}L?Z!OE*;RTn2-zT)o^ilA?m_d#&T{kq>?VD z3$3NzFqiY?(vhKZvLS-fP$Ho`JGDjJ4?X6Co{})%Z@qC6^@)1R`Tp!etExJG54Ur^ z^V*ZmjNx2%i$`c%jB?(qA$ zOdD8@Bg!tL)^)=juBcZTxsiGQ5&?G=J+yi&+Is*v-h=X!-?tCw}M3n}0V6QyYAjJbO1ubLmwL z=5pd{ltNsd3MqL7o)JO~ePC9*66Q&lRSUZ;D}gI3Npd9AI_Z1AH36lSpR~s=hx{V+ zZxC8QEf$s=m_jtEQVPopjYckYqaUG_4m`6^`CKop|7faOJH3EjLvN?|YtJmwu7Qs7 zc?vwm+)H8BR+aXFhkN+E!XMs!=)26+v#hc)7MjZ%l^er)v#YoqtOp7(s_%5W62mAr0`FoM>PbYMYjv6{!Cg} zkhTENK&KxAE%KP&#z251x2^ z8iLT$EuzdXNQ*y6cl>G${K6aAaTB~jSb#SAJ@_OI{>&{`n!lbhIfYR^a&@Jnw#F~+ zIvs3|y3#pg$<>*?z?lyM)fpcEKBt-&3p2oIy|gpe0%2W z)TONJ9i2Kk@4goHNSp{;RGj-_U-=DYavtdFoUGNjh!v27>tVKt+u{$843b>CP2A@nyC`#BMqFoDcyr*QytPP(&!dWU?&r|Bm@SNL^`lRV4x^hc z&Z=T^S2|^F^x_lkD_X`xQk5|F7-Pi^FGm}DW?89oalP-|BQ+ug% zr}kSY|BeWHwY-#JXo&l}PuEk+?S`yo$R9`Yx0Ll&-8g1Kf z*X!qRDdP^V15rB@d9#YVsJ2_T*UltumhdiHLlIIu2pL2e^njsan8J9WtX0rC&PUbq@tAz}KC$zi{CGaKic1*^0 zS&)bHAjw&)StHEgtLR{;`LA`9v_Z&him6Y)d-QmZ{lE~Q_}LPKL7Pm@L(rqpUxJ^) zGTPP^@ni7*er0kFlp%jzmWq8>7m;z4#gtYA$4-#F5UW*J%3*o7BGQaha3tlHa=+%- z`F++SEArnsj)yrpbK24zJyV>go>ndNGA!#^F(Z|pr3;O1{DfMZP9Hk|>0Rc($CY1l z*(s0kac!N$+fTvVeI36Su#RD9%J{WI&5scwErd22&B^PCDqD zo%|`|I(&mwCVGZm#6z207HK-$?#V6ZwoEzKbGm3aXx>1Mjt=I%`4`}(+)2CSzrf?- zUywFUf&clI&lAO3zmnb-h?B#?bYTXjt8!pE-UZW@0MnHjn63htu5@6! z@_&Ts(D?sNC;X>nL3t-SUhBx1+2m@W4d%Q%vJhm;qiU{f7P?ujni*=hta<|^z~$T{ z+#2{j4P-|Co>Fs8ov7*i2i#v`uaerrI)Gq4Lcp962IRRvJzC^g>~CN_;kyFjE|E>(Afk=nT(`|3AXBy%Rjaoc>eO`C$BbA+s0Z zwq4bTYjTPf3EKQZS9f2vaZo+eVy`exBw> zs^iJ1H=XB^=5(&y@uYiByRfdmU|k_W`ML9fs~P7381bz`oQV}W<-CgJ=x!b~n`_w* z2h2$H`(Td0pHvP`Fz?Rl#Uwg63)fWAL7u?#9JEagb2~LNw;MpTa3#o=l(D=TwXajg z8hpa{<@f}8I1`^VHGYsBOJXWvBW6uCUpqi5m8U)vpGs(?%O%mfvA~?8h~T*hjLU?PzTp*DxX`x4x|Z%Oa<~$FV+N76v?(c!Jm6 zbv}nKjL&&KF|upU$bP9mozKm;DPtWUy^HBe8@e(I6rf6kLz8ZQ>Dl1FP*YGtS_9|-J#Qe z-zmK~JE55~9g)5a()WZ>>(>m|WcV~Go*dz+5!z&Pk72873s^Z@Ra{P9Q97(!A`Irh ze}^^t6Y!QYegcSeQbflR3TwJl^Au)8P=*$uzjsO40h`CfuK!b!k(n{km-fvL<6!r^ zanS69PKI{f8%LXu^P#0tPdS0s zP|+HLpYh|^D_|+gvuD?@(>Pn~+&P>{{snz%)`->lI#qZ^xhgI!1cu<w$@Snj9{;GMzEJIoOp*nJQDSN8kHf=EkuAo=|dJa+cjZ+dL95; zyQH{E7AGPyDOWBo#uJbvKM^S+<#Yx=b;Y;qE%AnDBX~as&qfNRsBRTMLmL#V^BKCZ z`L|A;!e?G##&*%wfzr&`zkqj04qgzdp*3-S?jK;~GC-vWsPLw`fJ)&|)sS*YK!tC= zw!|Akg}WsPRW$>stY@6LI6`%kA4+y+L8=QTKVQ>lao7o_Nka|>lPX}E*9A=LehEyI zZaf4`ipw_C2!2+v*Ey?zevNJL$K_~4qdb_*l$~Ccqhz7gTmxfIKL^sxZ7q-@#m=1@ zekVT-DZbrcId`$dZJacuKC2oal{EpWwVuyY%ruVyjNLfzX?#Bf|IlW?wQ?^%UC=H- z>eKjMJdng2^wXu#%Dn)+ zPeAV@<$eME!yNi^Nx3GV$G2-O@rKa*h^`^@=Xe0$%K>^F@T~#9+iv!+zAMPrnQ3?{ zob|EdrU}EL3C`;qf$soDWw49W0mkM8a5}*FU-0>Fy5@7A;B(F4^IQ22az0IDxm(Qn z+URdsn{+K}W7mPaZ>Rb8G`THL^IDcPu44-=U6&3S?>|huPZwitJ`6Vk4A%n;H@Nnl z^UJs%%D4f_2eUJ1XZ(BHE3jHe!EGZO*MMiO=4xYY&Itt>eZU@~v*3MK~%QN5T# z`LPeH4Y^8w71l2Q^4F2*_aWxi@i=sOFjo(U@O%s;TorwVwm1Kue;~{OzI^2@_j9?t{3GrGniA^P9t8Nu_o&r}YZCpN0aV*hPD$NdlW9PQMTol|w= zwovl(__KM8mKt1h89b#y^7R+8d+N8aHse-?H#~pK(x)C4gs*pW#qex?LD8sZ^lu5gS+|+M}KbPX$8#Cg4BWyn$f|-Y^`;&u4|MDb3L}&9(z=iEHo<%hD27V+_YNF@`G`UZmjnpD|p; zCt9w=@NOD>H-E(9b5XA^_beFsmEQq|7QI3akZYh>*GLk3IRx*LM7LY7v>YJ!H5YVo zS8|9Hg!~7{Ajt>g!GQw@$S(SUB$Yl8E}&I(lUgpVEXBK$VaHB8anUT6|1#D`DR~v& zjROu&^Uv?H=RmiygY%+$&!;GJZ+CKRBb#n*gfV*)OV(~;;aU@BIRkXGzTXzvl5WoryF4=f$_&e3)6Zf-*TBXjFhQH^ES`XYN@ZZe@pV;VQ=$`n>(!k#IGlQPlqMd z;`8!Lmq@I(h4{Toq!2#+_&u8V1NaTkf|cqvQ}u2uG7GkKOZc~yb_;ARDk|Nks{U;S z1?n~_;oTMpNYB52;gucM%ki(sJ@U~3GoX}@AWB66QA&%5Qq)Y8;Am2Rosaw9Y%jRcNr@sdTFE+@$TK!7Uc&|5_^V5lcx%mR#669raJiZp;IYK%yp zI8nT{MDf@2UhPAs9SFia&&PR!&%IDbiXK5E)(@y_0Fk64iKIbJZ=77VsKY9PS+&0q zv0X^~9Q*L}UDiYN*S3OyEUA5oQWhYWo#}*y0=_K;1)KbWl8T(lpY>(+3%gaA&+khr6H%(Su2Jql`6Sx zulNR<@@49fpTEQ@@r|vX0=hNSL)}tbK+8&?kBf^-wuF1A_k_bG+e$p1ZIMt&sqv95 zzLH3{5<-sDeI<=Ltb54kp>jHi2)*neDT{n--xG=W%6h+KZ;eEH$Mi_aP`wFO7@vn+ zRzKu_a<6wIphp+h-sVr+2*FaqP?i8lK)1gM>nJ}hm9HAQ@xmVt9I#&;enn`rg8DZ{ zlFhJu^FR;r-jMo=9+CTt-tY|MJ+j1CqoX813XDKMAU?PGd?ATIJd2asm`1i17yGt^ z!=9*Wk}dGQ72ZvtyB^`KzJlV8W?Fmw!~PyyRW-boQvSU->?d0Z>2ah)O0qs9;*kPU zDhci{Yd%sXB~7YKUa+FfRG+sLz||7z<#;98R$N@^^l3O8*hY%wZN6~LRutHT$JRi& zyv17__NaY`>{npzsz}|5T%Z8lN^uXeq_A37p;bV?e2v5H{DPqK__`BMppuxu7E%#3 zD_dwqL7^d$7OBE03^CHeDnf;(Oj_g$v#?MhElNdUzn*^qAzWA_k!aZ>>X*AiPXy&- z71~TCI-V9r|5gb667?4r!7A8eo?KX@lBjGhE-Zr8zlWAc#UN$7Da7$hmROW@gyGq&*bE_5_;2eD{ZGrK% z57|lL-v&s0oS(!EFO1Gf!Yw4?d5dzV?2+yy8rx4HpA?|`nU}UG0hXFrBp++-y=ZSc zlt%ZK!Y|ufLKz(qeLntyLES+S zP_7&(*k9t6p!|~krC!#e21-4oJIE8X&=I&0~rWpjvX2Elqaw{BCXn4E3gB0r_Flq6NHtNCQpNZTwpwP^SlINp+~xM>c!>CHtbA zHN9ltU`&@TVLvTH9MV*)AwR6QcmiH1jnbWTPal{oXG%OMh0-1Lsi-%n^o8^SUOI!) zwKAj-ZNH}sDa^CqUxrlb7d@hj9`QndXi&2UYW7Eay4#nAZa;(ka)9kuczz`{$&h^` zoV*nBGRUilUc8@VN`ThvCs2YGAWda{q!};v31Y1ru=!h8NDxA@6nYKm1ci)r9FTo- z8b^J|3hcYQ-tci8_8}eF5}*!vVmt6DIe1|XUStO^N*-PiA0*)C5J~}!YBWO4=%{p$ z><>Z?PV;3dlu*EHQk|MKrzQ`7B87Sd9l}^p24ewYC6_u&ICYjd)Cqlx)JYf9)%1GF zTauF9}EBE9ov^l$Nut3@IQ;|^bm3?{GS2;XX07|{?BrJbuNbg zbDeY25@+troc|C>>r#nu^}k4mcF}$bjK2iF@i30`g8x#~SAzdP!@TS%_`ekXXTbk> zXVLH~Jodr={qTQ{Q^rsSCNH1gXKe%ZD*ww~8TXQDfsxG8w5>pCKsE-$s(M*vh*KTB^WkpK1 zY+@bBUb;GPG=M4?OVi96y^1^lYY{E+Il zq;`y&wxq^qR$@*ix5r|&!(r8hmYu|UOYGe~6e!5E_g0!-|3S)dbA+7WF==>2eHg9X zyiG?lnYLRIJx<2LQdanQ2>~8yj;^clmJrgix|Vn=4LvKQjPd9{L8+fm18wM|qmPMH zY-;UM4A1&zIlh0!qc=#UNeMuks_X&s#t-M?dGZ6ThQ z@p5T>5$ePaLvIvXBs|1}>D#HJH>yRJoZv}WDSk>EtTtL#9yd%i6ff!;)1%H&qxaR+W73MEJn@O9A(XlfKuX zxb`UrjVvc&YX}RGL9Br6sM`_4yT068QOgj(J6c?i7lq_1X)W~cCEUgk+8ja;Hu&y! z(aI@~?)k7<58$CtI+w)5(_G&tky>a;bOK@uLn5Ieo+{}r+HQn(i8!ImEHah)x=PX! z>#H9vwf4H5)z2*;`!$7PFCDGwa)Aud*Lg6?YVaHdPv~2jTgiR9fb&JxR@BjA ze}DZQjIKo+#DaD`NW0@>ytYz!FH|jJmc-{(!h9FXn^y);D1Tlt>8oH5M}v(F=Ep$$ z(SoUW-oc{2_*#YFjg06&VfLxO>H#er7jZvdf?obGWy9_Ko&n?M$Hk7mkDPZ8S@=48 zo3_WQbc>~|;dL}~|BkqPr=T7A@a+0Z<^(&NV|iVh#FgpRUdJYz7`* z=v%6W)Z9A>nv*}3d`$;N=X;a|AWhQyE9m>%x~K<5j>OZw9w5KW;)WpVNS=!R1=L1W z1MZ5-jd-u+KMg@VMW2r`uv&}a`N$6`;}jL|MQiQaQ`)QafhF3TUVfjb+iVJuL#f?q zs_k{XV-4Pp(YaUZRO}K}4?yp{oQhqfRs{I{T)LTIi|+F461GO@0B8Fnz}q6ygc<5% zb#UJlmGo)nZXV0=gXr?(Xr0Z%E^CV~rF~3u8|%5>vGjSZbI+UP&}&xj0j<(~0ld9O z$9=LpS#)4l*8}hC{}tl4LtONG5nc-6K^SMZ=|X!Q(|itT?!q)5WY5Jh{5=S7#PHXu z$T#r*3ckNsMQ)&Y+SG2f`%oKjGq;0|y&d52ElvA>FzYP_7)iyN^hF+BOBvrw3h;i) zc-gCgTrMX&t5VJHNlRzyYP*%t=R#P6h8oX<;~?QZjUL>8?l8v6kXmU_QJbeiQPG;R zwoFYKJ>eZBi8U&|nk9NN*)XgZvzl@-a08xajMQ zyGL^VRk$AnncL(id}J8z#2>?_F9qEH6?z++=-mCD#lyRC{}2pHUBJUB(dYqv$%;LJ znbY9s=uzZYcqFHh+0vds3Su0&NnK-{`zEZKu>smcLCKDEHavX~7UX?>gnQyM2H}&o zhAuTbjKLAg?~MRG&~u=l>f^(qPt*4NkKi)55k2QV|*|@8>+h%X>-tFezBu^(y z=69Fx?k#j1v-1=@e{GH31w3ABgk0Kmev*vc%__;uP}68#?9B6Y;aWq1w{1*#jdf$- z)Uxbd;DH${16iN4?m5|jPWnZ6$};!!ZDzd2mrD=zh%nR~+8sw(5Rrs-)Nlzs84B$v zkq6dF^g69vT3Uo>?O~WD=zI6po9BdzdUz=U_ty zY{UgN#!I?VsXVG8Hwr8)5m-<{&X`y1;Gyb`K-JDbRnGZJHLt%L*BYE%gw~gTWcYhB zfB#a!-@97}7i3m-OznckPywREE^a7GjyNw~I;oCi|0oMHG^qx%IJuG@u zIo(Op7ITN|ife>Ok@QXtIEicgNe7a-Lk-M&mY_d0D$j^Dv%OWRpIjPdI;@jF=BKk?Bt z-~Mm9PmXtVBMTgUKc3{;sZ#jZ`V@>R+dJ9(6nD0^^cLsK_p;fLrp?%qu|bkv;mzfG z0RW9rC1dSvv7JotQQQ~;l!P)j+LWw=z7jUB<){z8D&+=Gv_QN8|B%y)I*eeQI9)%A zr)#U*!lG7#3~NT7>Q11O#lTGi;&>D3Zh~{~RP%GJNJ<$;#!=58`e~!=byEM0wAF1z zTcR@B68)2m=VLPIEvIo4c62rU4sODEKCVyX?b->H7;)OQBh#({&@QxF5RD~c0AsKU zBtUZD7FI5aR&aj-vBp|MY6JNY?U9UaWn8HG#S`gkH$ZH2fv5yRw?|-SxeNw2tIrIeUXCSD!MHqc;sBqm<1VAeQwJZR9hT z&p=w;sG}DIylIvW{RBeiJE7z-z9BA?-FGM4c2*|lz<@r;Zj~2v`zYxfEv8gww2(RE zerARm(aRJ01FU_ntwt*>vz5P>2`eo3I#yWj1B$&5cw`@Ps5by9yQ$^!18PU?*2qY5 z8oi&#PDMhZ{$Acx~jX{^SCr508|18TVj`N&qDPg6~GzIq=^`_e=?I+V9l*lg)f zZwnlA*nT)eKK%WiG`<$*q!nX?z*lQNzKru^^eSJVxbZa{@bv&|B$fQ;4C0ISh*S&R zTl54!pYCF_;UDot5l>X$>3)GHdK%=OO?EN7i-FHbSd1~_D2_2=#1*x|SVJHu-NJJk zimA+3b^)eJ_#BOLn+8D#PkjJSqq~@=q>L+M(uLiO+QF}M~?pZM|7bzO^+Y; zp2g`hrg7_o1oO+Dv|5fQVW!!92|N!6$L(FfG5rv5q~e%ARx!Z(CRP0Osk!8&|*_7I(hhS`bgtbWzLtc}#n!DK)3Cc1bgs=zU`4Gc2$$xq!g8*ZQTyvr2r>CH8Gg*cAjU3{ zasGoCY@-h{)0hfn=gU{&2MtRo=FgNd+gWD@obR)sZXcaO0jKbt_CwLxxBJI5Iq*?t z!l-q!E_}PY{e3rb-fY)}wR*?TZ8Jbjpl?RNvkLkTMv(>yS36@N8}2?H$Hpi(ZC)S0sMbb95yXv#c=#d&)Xhw)p*UQG;8jD#3Xg<%EYnO_<$ZCmW)&!*6^>hoVd&3OUMhKBOjJv3~OU3vsZM|1y?h4+96wcI^1Hs zUZLmfdS>!CV|izrfsPF1w{>h`1XL5qIMu z;%>^|#jX3^VVuCk>UEuNz%Pec5zzz9;itRrD7NXVPuN!VV3j~X@uG=>5uUA z!SfY(s>C9%afyc(3_ANHUI5f=@cl5H-)_(ePbcm{NqO=X*B}OP=B+x(@T}X0shA^V z<7L-=OLs0Co`$izRIDoKjg|R#)ShO16+u5QE|+$~9QU?J*eNG_PtEMouMXhTS|wXu z`m2CAnCn^GM@e?hmWi8qi=58~2Isq5oH0uU99;u65miM!8#>Wy=k)7b>2Lc5>3{7? ze>+d#d4KU0j@5vx4I}vZ^1Xb=tcq@=?Z#_9O2Ru$Rv#HaM$3MNJJaF}@)O^9f>tsA zrZ%cx(h++{ze~~8RP1x#cvxY);+6UR+gI_arHt3`DR(6A(Py6R6Ml8PAusn}`D%x; z6>Ic%SYza8;TiJkE|}`GF!@u)bf`=BhS#9~onB-7ZGoOYs19BC4NNu+U);5dPzu3c+HU`Sx2$Z?cDGGV{ z`}ke!ax$%`oGvU9dV?71o~ejE?=)PsPCj!yLSRZ`Wh$9PxE978$FT~P&1zFT>o8PJ zhqiPW>u|lyzp{5!g=JG=XCc66=}Bm_cF5t-ZZmUg{QYR)}yHApxK_km+`mJvpwJNH{53(uIMuMUk9|i zLVcQ)dj^z8mO$xZR~B%gaZ9k5Xu71uq9)qjoK}Rflv_P`IG(kssZq_;s^>$S=hJ7{ ze0d+6Fa4g+O(^Fd#M6y|Q9A>p4#saNH9SuE03QB`?&0%Pjhw9xfp_G9cH=R8^O>^w zgZZPWX)Cq0+HKmN#hwRowcs`Vjb0Vx=M(y767siOkHXXEZS(?7`%~8a@P(xq{CrZJ zQ0~P2vJX)Apq}p*VZDA{?@2JP-=%+1pa=2%Nhi9FTplEPLHhjZKQHNeBf!(3i&G=$ zW2q{z2Ys@^yI#<49VP!nklTaASCF!fg)cpTTo2#Dly!{!75_e34#3k@N+1x>21K<$ zpm!h;)c&fyr)_J15uqXIcT#}-*6}RqMdvI@C%pq9;KBF2Uj}p?u>^b@fOav{Tkq`; zGAigz%czCc^L0}R?s=9Jr@gjVeMmz>_;LNVgIj@rG0e#Mj zJ%QtnA;(L50w=*2@Vkl(t=V`mdtNaHsO8Sv64*9 zu=53&k}1ljK{AdnAW_wTnwF?D9f>M@r=v`Yz7dG}0b9&{H@v1mGsMIFvqgrT`(k?iX45}xl5o$MaujVVt5#WMX@;J{(L5is)Sv*kpL z1nxZ>_n4Ekp8KE1oc#N)CW#O+%7|TdHSbPqIT>3j=mQHWM~7^EM&#Hb>+=%442|Z#d#86we29_iZA)-s4M=9c@D&`%-OIn4(p`Dxtt8>{)A4)QkAX9b1vR2ooj)<$Z@ zh>D@6JXU2gj?wTWe5|g<5S*EZ8O#!`eUL7sx^=cDaXE*h44#)hfTJI*#dhnZe9iqZ zK4C8VI6mc+^&~!F7WzAULU~W&Q`3xSFC4w67r8BGw-=?YWAhO`&w6&Q&1_B5B3hj` zN}Hse(zfzh*0$<7)^_3ZtnH!~Slh*aU~QMY$l6x_k>B@4-9|CqP~w7;It zejZ-)(u2mmniJQ#+*bMsa}-aj4!rrGMjVVb2L940LHg+svfY6d2i zj~`M-_pifvi=Vv1+K1w*rX%*g9%i`4LEAlzKnJ)UYU0$;Jo!thsZ)U z;#%8G)98wa0+F8LUM_RlLkuTj#u2J7LcN?+Y`@;BB6od{)_W9Z76x4QzBCG-u{U(I zlG+=5TER5giE-qR&b50G4v>y34(PqY@YB0z&YHWJ?-Be-AE@ZU zXDs)ZI#1>MXfXTXd_A#F9}&|tz9OYOydf@3u7wyP9o7eW+?fL+HY9F+rU^#}hIr#X zPDD7sFW!2mL&(AL=H5dPYxU_W)>}osqV3l6(B~boH}yETEmuL&R%JH5&i8M=gmimz z(p?Pc00Q5HLOrtvKVYXjjNg8f70Cw<99R+FsMW!{ zitqIks>o=~#}-;I>&sz2yu;IB{0wsopXV))M_OpTgrVNrhj7&nWt45d9`#%YUm_E2 z5xs=3;@?NQIoSPE=E8ds-}}0lYxyC*4SuipJsowt0wl@;#H8Z8w^I(y=zHQ`r|#%= z$_|Dm@cn^^BJ6{iQWZN-ZI6wKPoRYgks}iuV0@n(pM-YK{~jNKw$aAMCxoLv;vDNe zn8SA%)sPp@LbZ4_%75j65{(3ua&<<|IC8X_9x+<^Ivc+xq{k1X!@4mtiMK>bmr31U zy%oX7xW5qK{i<>vDo0IQAnhZf@KaO8^;F$@MJMFwN0!qs9nFyrVkyL>t@2VPJlth? zTGIsg_~sJSfvu9xfjQdOsBy@$Hc>FO%=IfXwol~tSY130oZS$Y9KRYNN$i}Me4a5f zW4Gsker!fJSM+zKTRsskpGX(-3DUgF_e(p=rCh$^^$4s1p8ULyQ#nt4FTtF_gZl_# z)w+4D?rHSEs?{Ubn;z6!@(R63Tw9}FrMw%E)*{sp-?|UA z9=+}|d;yPHTA=EaSUeq^(wA34g| zD;n?UN1o*9N6v8RN1g)f&2eMlr=gw(kk*!#ejBY$XS%;a`fjDc}6j;HT=9MF|K|66#+ zWCY9_5poyabFqSB3pVJ^wjCisSfu|Ku3J(u;m;zeT$W!h}ri@{k zw`TD+s>AZs7V}ghB%VaQ>cT*wT<{Ca*gh&{BzP*k6*20dWpyQkr}#;p?m|63lbq&{ z%h<{aayFk63q7t7j1*400e@A*sh2bX1)8ChRp>{#!0V<>6z>iYD`gdALs>nn7YZ3M zFtm>3`wSb*>z?Bevq~wy?$tGn*C(w1rdOOPYYh*#d3egYihngbUst>0I;_F|ObJql z)!>hGI_DE-EPsdb^h>V)l<%`E5*p_T(at`DQr4%sk~eBDoF22R z{;D{s|3{3}pRbbo{{!kN2kP-P$_mlu(v8tbLjbh`)>O;H=dauCBaH!^C7y}j+Tf*- zz68>1Xxpp77vTErQBQ*pbDPCcxj|#_#^*YZ;9SSePu(~T{J`gqCgHaHxrZ1W7aC;b z&r<>t19=wm_cT#3y+HuHRMnBElO3p2RtR6rk*(8Q%znEI|t8 zFp0-{!JGuWr$zh0c*^U-TO}#0SD*%U4#Fv`hj^>Vj~|7hA&lp5ddm2b$2X`lDMTF; zs|a!y;6js+X+@cPJXu`md>pR}2p>J|%}O9nee8X}c>#0lRh0;PJ#ogZV>;IU!@Xt1 zH`-wBu+%`@@k*B7vvS*YLEd>>kA2}$VYnwFRNBwsUy|tw6wfkISQQW}+_gMkup}m{!2Hu*& z9;!V`#ydWeDYrNOsE@v0S8!y~=GB!dWRMqcgW$}3M`@I;^>~4I`vxunIFM5CCP@5Z zh10{?q(JHh<)`l!twy+>1PTP+LkqVh_=Hiu7@rL984b>~CuMZ!p(&#bpX%T_Y0nj? zp;9|uA#SafOc>)~Dui`gLkj|pxJRKynWVv5MKXeoKqV%FZ&pN>EncH(p=Awg7&8ZV zz?@()^pRRW3vV^iZYCWJvv1k}(5UsRcv#egp032PD=?L>-pWXly~Rw;^qM{#4FFER z)Gw(*C@k2LyzERuimtQda*!5x1v z+DEnz98B?U@tbT%ENbF2UBiy}6muU*ryELD{yxRn$KlB4pF*GJA+02x`f1YM{Ii}k zeB3{lTh1QuZeuTZ8$r6VWD?46-p3{J6!tXGK|kI?g}1Pm(?TV$g~`@8S?5+Nyp>a| zr+I0~@dBI_st7`<~^r)O?lyV7_OCe7iCu z-wy4=iw4p@ybkBj3>gtQ&g<&eTR5)z1T@s$Y=>47XC$OJ5_YV_m0dl=LaS(mOICPi zIJT6;aV-lJxKK#?uy_MWUm}UHAN1ak52a{tE;lbA(PIi}7$jAp3{+Ga;QhkyT8Fjt zyAtje_@f=xOkjfXtUMAH3tAPs*fHnZO$%q!8BTaga^X+KI6b zStHCb3elFJbtJ~hCP+h&y+G&f#z?-}*bJlC>X!7{!&zBKYh_6u%J1Vx<-sz{HsyG= zpU?g=)q>c>UQFiq%c)rLrD^FS4qLzK0P<7VG;3iLn7HRd$3N2RX*orr@w%HXu_FtpdoNF%!`ND^e53-Q=f+Pdp?8oHJJXHw;19^=V!gm z_|))xI6Efd=m*jY%1~hK@robUVE?BdN20@k4mq|~BMspjTV2~8>lqlv$5#)*nnW$p zUI<~zidB!rdHs`EyO{%R@(&2dCos;6x3A&N7uel@>K{G?Zu?2EfZlAk{;9u1CPGL7 z4z^Tq_l593-C1KzPx~BotzXdF>*|5+)~JAy(K3@=^EkdXi-iLqhp6xenYF2TBwugT z!s-BdIjX{Z5-1DjSdEIFmLceI0HjE4IBFtfXV~vVVx#noRyA@Q%X-F*JyqST;OT4b z{ceZ1#%TdzbG(d58JksS;2xK+gn0a=WHGG>l#nHKaCIrs^+j|5Jb`KhXg_hvwl7%g zhA-HvkQq$H8mqsg=67agU(zHY#rBgHOaIhMNbCB~7}Besj~Dg)xtdH_|1RqT)VhfF z=OsEZbaiOT2GM_*ZVKe>Lo{jPdf*ONKSKQgjadCBZ+nX^qBefRvl*YVshFy%Eusnh z@*q74uS^QG;1z!fnX=(CwwU&Y*goVP>VnK$TNVah>6(*TZ~Kg|bJ5@RqE7yp=d9rl_@TbuY@X-Wq(H#rE!)v}JQ}6wdHEAl8 z@iE(>MP+<$*XUA#!Pzuj*A8{crgzhLGaQTo<{CJDQM+o30QI?U{1x7ow1gnmr}%T8aq1-q@yhUfIk3(640HY~wP1Xlgkec^i%ZQ<0ls`lA*xQ5qo)4chfMxC&5vC21d{88JVmH>e>;^^oWBbib*B?lfZreYLMo`^ z(m==ulmc%%QUEP?|D^i@*usW1<$yeY5;$>4wN47SK~gco{s^-5aVqw3j&SzTN*wvC zy5uqUX#%rTF{WREPYN?@n9DN0?!1zFj@mIW6|0kF+8&bvBNWshIoO?&eE+9E>B9f1 z`wsIUXD+SqwhLRXCh2N6pE5>Zs?3_enaj&NM&{4)oB14nhp{78Z>eMzSrvX3ASxy+ z?Sf8sIIwQXRX5fmIddA^>#K*=&8pBU@+^!{q6BgNlOCrU_#Nywm`P#9NO9&=MTFN7 zKHmxmzwtjwxG!JCxc87E^d1s##t|vRy@&9Rh>X z_tV^`8{p5=Iv>`w*SF3GoL*nQS|Mv?CPyV&hiL{MRYh8N?<0eI_xyi&dlT?Bs;go6 z&di;WG-FAlk?kZVAtT9_6+*&Tb`m=wM2?fN1d5}KLxoH+Apydo$RPw;-jWcOw51CH zN`carozOz-0Hw60>kCO!=-ZX0r7deqDf_;r`Oi6bB#&g9_Wi%_`SRpgcb~hSd(OS* zo&)I*;s&141p+Mp!`*D>%#r;vYW|17Q!USYfMbJWn?C`^MraK(=&UM#*KRf^wLi<> zbw8Wa*HS4*nWtbmko)ePy;u&Ec<0W9*B0a4AL42KPP&EXKKrkDzBwn`0Nf~A4Zf7g z(mbFIcc#!-mVd`5zItpc>~tYt?MyUm$CH+doD4;Vuc6|*yob|WcyCl;$aaJu*pii$SJ8v{3s`ntgHZJ#O zLxS=JeY7IVik5SoX?N489nWI!kNBc6_gBCKgS}4xcV1llq%zq1lrormR7!}e~&9dpj#Nqw`PBQBCjH^wt*lNIehL2XO+ z=@8b$IB}dZ;oWjrW?ov@8~^F)l7EdXTon?3gE4=_bN?OpEE>Ur{ajUtf$Y=gR5E9^ zic=8>f2DjDIJU$zfor|Hqd61}^$1nwpmUpn zI;Gxi=%BXy&jkg3C(a%CDm>-?N`vPQZI?sA?Yx2LDoYKN@x%~mstBt+FT}NL@xTzC za|CY0(?TiC#(lelV{w&H|MtW3)`CR3bMWm)R~lzqQU=V@mHEe%`|M`1K9WNpA}i+1d)$Lef4lkBYdG|Bi5vn90lir~kWLKVKC z{=Qb&bX!DYxKpm&d+b#3E(^y$PPg;o-*t$`bjzbJ|4ucurgpQ>c_IIV5aD_O8%G1&n(%aHk<&f!dLtYN#cnsorFh?_{t#CU%u(KdXW>q+{p8`h~t>wtNW7CMI zvDm@k7+YvWiC1v1$5uU$yEEXLl06-8U?$kLH^An6pc40xd8Kg2iwg1$7R!W@C;O$x zDI;$ACDft-y-{oT-l&dOux7jj4jDZIeTL3)4@v)k3I63T70Qgc*9$&IqPx_%(!_eu z#*z6~#h{tGglIO8o>Or~;%V_v;PX%4+K$(x7g0gO$2z-5S=7YOZ;$ z35;yoxuy~}vRdS*wnjl);$F=auQl4pi96?bZe^#lbMe+Bo+&)3%tXsmeOnh>N-6gj z#mEx>2(8Phmv zHAsKoX#68BGcQe~@Yfd=Y+ZN^%^=?JcZ+-8L>4v7Li>Bjs=c5LlF}!5*`5mHTueN! z_ENCJ>pF5SxJ-1cJ!Or*iy#>VYjhOj? zZ&<_5L1C_9KMvaitphk?osrf)6{!oYTFwDpIWpZDq&b!)dGi&q?ueG}zrn)4H^SeM zWqJ2zD)~gND|z=OD?f0ZHR6hIxVSpt8>pkCp4MJ(E=@}`d!A5)-po<@1oz6bv?DNH z9<=_dxbY`pB>>igU%Y3J)5-{tzidas9n4aS;2vmtLg`TtXKvF=O1B!V>>;XazNF;Y z!>}4o39n$q_)CgMAt(!#W}@R0W4Mkjg6o(Adu?9u9y^!eO2k|{=i>USxWxVYu+tDe zQP$;bHdOg8eXm3Ie3gBSLKBK*4O-apfN$R`kc`Xnw5tu|o>4q1!CcuYWFFAxaUj}4 zZK+2ktiiVkP;-s!C5f5~o3V2z-?i}XJ@}X1 zOC#I_J=w%q4o8+|7mVyGnuq?oHr=~x3k*wJCAw?-(0lVcde3Hf_iO?0o=tjSW8eet zy|w@RTJ_GaqhX}r#96%mZ93k*;M;ViPENzN-;{cYE(6*OJzY2!InznEb zoD`Nk+IY17NI$MGek{H1Hn;q!z+=OYDyUx-_V$~ld(P4R)*yMh2vnag-1Y9!X)}wr zf{b)TPZv7m_p@ZY_cIqG1=+-0xq9y>3o6r;T}e=xD20#rYbG0?rz<({`*=D(tuz2T zl6X6ZYav5xVZDG5e%9ezZGA*m&kgqW!xZMZ`iX37}<`={A|I(IP zZCl>JlfpJur+BBOB%Ur!!L_-@9dxL zyi{KjH@XXDl-J2+RiEg8vS8h44933yJilR`@N!>|*GxMog$@04se!Y8Qf z`yVmp@1qRR1Y`cexMNQIc>Dt;-)V8zgkNUy&1?sJc$b2HoCOZ0z>-sA&bjuZ^P%^o za_+yvX0};AP%1eOwAqSlnH;ENI~2jSgl%r1RRb=&H6nZOKIIyFgxxYqtNy%A_V}}s z`7^R1-Q%+auK0AHw9-4gAlYZcUpLXhH#naO+Y+8Bx^@e<*%{n=O~kkG>EIi-FOQh4 z5?`{9Yc;*I)Os11>HMQ*U?AQn1LHrVsKyUmUd=yNhHN^QXx~QryBoFbo($R8b5bbB z{IW5zekF{rmD#9_?dM27`KB<+OwXp1w1JL)DVE$VX>^7*nEe;vpzo5bcQ9bw)h72!9@yYXy%z&aso9>uKJX3`sk%n^BKuY#6gR`V&mh0Z&!NpTjH zF&uA$@w*G~)LHgU>wwn(dbp2eW({UPR0QjbK$Mbn@4VI1|dk z)DxFk=xQT5gY8iAK-Y&#ltZt3at7(DE>ZF8*KI^H1i5d7?LKiXJXXHox~hDE9}kjD zF!UXxzBAc?gniclzt~^FG4iK=dzANxeVy(#26}5oWU&|#PNisi$CcR2-cK8XcAT&A~XeuoU|LSQxFG z=-JxzhA;gbN{?gbvVq)(K(8%g`CKdCt?p1&31xg#pi+=Bx)Q(cOjKsLTIN6>l%kld zQub(RgNr`|ZsV&^j`bGSP}H~0t1re{O;HusRppKn^@AVoy+_*LqYpyf7><>dgf(Md zS(TOa-vi-YK;D!%%`UW5vab{BnztmFPx!YB=JsPGu{_>d+@JgJH0pI2=FI>fKfG~* z@HmfpZswPptKLpTSmkzt@yNJ$6Q2(!JX;B)`0FNmSGl*<1x|Yq*yAQ?%TEfuQ@NE$ zS$MBt^HdCedlP^=3%z@lLa)S=(%V2WZw&XcVs8k1AAoNw`E>Ao2)+x+XK+0A7q^zL zkpx_!cR%QryYRLNY7A5vaMfoh35rRl3A{7KirmpQuZm89F=>`ymgt? zq}YqmGR?MRVR3+$&1=HAFO=*D!mTVH!}u+Wfx1w(#R|QRJP)unhV4p9;{F5cw?FvA z{RjGR9z2A(djtGjNE_jW-Z=KhBHZm7*=mUamS@UZN!+ZcGTy8_SiM=PefQzeekArf zbRn&HLPUh2o`I5`g1rYR%Cfx&XqEvx%JB>oX_))Lp9$sdIL{{{T;M<1D{Yi+jMU)w z$>ZLU05(p9Ywk!Yw<3F$vG%Bw>|N-MPr)8vbQJCaG)q@9+{1xea&Wf}MRLsT60PFo z!c@46*Wam3BU(Sqvvvy`j8EdY_eenXhxveoR5hNbN4Ogg@v?I%@a0Gahd9!2308mq zGl_J+$9TR2dL#>Ult(#kYXmx~%TGgzouXn>+5fh^kODd^g`CcRwaYuJ&)(cbW!%(90T<6FMroYt9j4f*rQCgr*uuBIj>m)n!YGEg!xfA>_ryDxut z6JN+RhQC{vWFiB1Pv+e`2!2>s-;MK~Zssj?XI^hoS#F2MRs8OWkbh5~r48GG&bi=j z3T(;kIrFpgri55-I2Z2RcAF8xx@=<)edY6K?obqUM}R9k0s%FDZ=9n{=&p_1aw9=^ z1bd??QnAm0ezbg@f}R=}0oor=3NVeGz+NX;5?mOE5>eHD@%jQ+mqDSk8yeVxhRMvm z57%ZP0xfQcvm@EOh7^QxpdYRXKSzvR;V>#iSQWT3aMrG%RRZOAVC$xN zzERvLR>YU9d}pn$io89Q&r%e&Pyw77FFTiqvr1-vOBqasIbvIsRy!(U0xdF-fLQ{R zL6W@>wKy+qGsLQ8=PO}L;AL1p&KR6=U=?RzU&JFQtyD-^JgMx3QZ5GWrK_WA0d^2)f&KAUl_(*kR6 zKhofG3vmc@%tk2xW*TibOT3*Y$*!_uM+;EoWHavhTK$CLOnPz~?p|N??#zS4L5Y9I z(Z2RgJWmHY;5Pi__(jzBhwq^x%x#03s48(cvgfOWm&`lDLL=aJ@HgQ3*>;9}(6{N7 z9;MR0BV3Io^LEcQGBmQW*Bm?9&rhP@P_cjv0_O|``>bD`G8@*UIoEZCbDO4Hfa6Y^Q` z$&$QKZlIWLvF(y3Er-=u=$gheL5$yR72xl3EkG%dV~7KX344sRA6uwR5hZd7dMM78 zzzW;WH9Bp<@mNUqBu24DBlv7s`%C12w6hKVvYly5F6FNeuUw|9-Kxo!r~zq-#-)+9 z%h9ChrQYEK}> z@+VKD+8Im_ZvD)zZ3XaS7`AH@;q1|~g;<48$bHkW`~D(x;A|cR`p1HmJB?Oua?JW~ zspPSD0MCN=G)bPv)E*`XG4vt7lwbvO8jR>;bjIp`Q#sA2bAFB)^iD@sz+RWX*)ead#l5xIe{Ii|jM&xls#-m`zX;ds+YNc=5_o@!xOkEU^Ol5n)?0%$5KZ4jiQB0CrfeNWx~@8zp-;(Cf9|iB{@qMk3+`I_fDF-~5EH zzRXu&;25N-eC%2Ndb_L5WIdAV!&zg`u#umb=nOl^$2-F=N)3Gce*5j1e$%S`J~d*G zqnjA}%X^WcA#Yo(zU%8g^a?XH-21TvTwE8Ku(i z3&QTQ2-Bo%(*%Po8myP?%-b255gCrW0`4?>%xzU!)!KA3Al-~H>BgRK95}(b$1Gj| zYCx60Uv879Ye7b-ye-Gt2LKJWZ{M*t^axt}wP(Uu6zl_e!Jfq1NgO&>B3}wWjpM+!_Ld$ z#R|;7yaTJ~@vthP`yhU7|Lh6MZy!@W>X2L6KeIX)yLr0$y-Jy7`%n0qUtYO#CchRM zbS$L5$icJy{E7^RdBC>C3M&re`4uy`w-)=c?WjMlMS22O`azv2H9qz(p@UcMXU5uR z>fi%xE*CfI!q>%7S|d!pL8*)5ugg&5(4WI1hwwdxr>Q_YW|^Dq0RJ0d*?Se4$zaGp zat=pLGw2>n%mFR}Q@xGSFy_-?#D9OI^VpL4cary_Qk>V3=BICT0uIIO|hO_B2}Za_E1zYZ2emWSPrV)P6SJ z7%t#3k2b6==a9N`4*56b96Uie3+u{RSX0i}eFS>k{wr`sF-i56MSHv510%K^mXMnQ zm${rPo*k+2%6M{uGUivym|s&y9ZzB7$Up0i+cQEgkSIGAvFOCxy9=`a6_)Gld-!EO zQAgB3e=i?>!!WxQUv^oRcTdrWqp7mYqQU$eKDZ*s@#SNHZket`DGp_8r|Wid^l^Gi zRCZqqH#sCtkLdzJ(054D;crmOr>#C*AVyZ@C zqTw7BX%3+@Zgvr0!ezugfmxcWE!0A62XGzuohFWNEH@AM{hOCWxqsfzC0b?{%stdQ z76qN+;8Pa><%=g|vt-WZ!|LAS?(U6B16^~)$yV0_ zZZ&n1)~6_)wJFtpuh^sW?+M7mqBe#o>Dv~0{I*R3g#X_lX^N9sAFn?GTZXCz8%2h?rPk& z1SK9{0Se0K=FKH%FN8JnUp;i>AtmR1aN|rVIq!gLi1z`0 zcni|T`I|u1y$i0A{Xv*cl@vc!#HxNQ6JetGiPEF4*`V)kZkVNEdK$9TC0^Wd`|RLc zlCX8pht+F;w^gE-ZbEip^gY&0($~|?QHDCnWY|NW3-_}kgjnWa|6D%U-^B+2d-O=a z_pLY>cwX4oR&;VV-_7$Y59a504(EPpB>FO%yP}(KFlTqd4$_|+LuU$EqAohSL&?0k zC=-JC)O;db(P!qT83pgQ9|OkM!+)m&7h8Lmk2FWoS_<>$dt8Fr-wiYDEg18nc_=TW z4ui4-5ux903E8mQmMq&mBF^4*-+OwLOH2mtW0rkaXzOL}XP5H))raw|m#6rGV4CQy z)!IXhUOgl>1={fS%C=?P{p_LK-Lee&mH~$zsU5S0%)5h9eP>#3ZYk8Mna-cwUUZvu z`};U_)mHg&Ns_n5+`dD3Y2_c3wuIXU_2@i|?{r{Bu7VJ$-lj;9&RXu}ro1hNEi=7y zH#V-_wek0n(@7`RrZnDyM~avt+JN@SIs zlpmpVtC`hYGIydrSEc0aA6ct-J}tiz#-kJ86*h6Uf60~jTq(Z_MtGGSS$k5z#&nD{ zCx57H0)B9pp^nRw9?t7!cS&c6`MEUSJss|y3LFk26OQ2PpAGhXZ6+H(&m|M)`LUPB ze^)e}#_IFwgo1q~5uJypDi*o(@x%C^6h+2YXfX^?@+O49ycmI=m>x+ebntsU!mvkdPj<$yORXp^=SBI5DqZWhr#hX={;Gsnb2`5fX2Roi66HF} zVJ|xZcKxFxIjQ2a`gA^uNfm;Cb0^Jxto#ogW` zd6T?lkrl@;+Z}H1NYuTEd@s3rA|l-YTf^z4Jh&}skYoo>g59%O?ovz6X;K@^uM+s( zrI5?+iZro|?knP%#PUMksc)9!pJl@AA2roEvH?fK*Vt1S4mwy7U&l~W{&nJ%Im9qV3 zM-1tFjQcRMb99Zbzs9!$d(+ADg0m991^)E9T)`P2*|36h9LXdWoD*RF z9nDvhC1n|<)4+#!EFUPsy;}Yr#AtZp1?8`n@A3I6saDWw%ZG~T$rdZsbI>cWjTe86 z=eK-<=g%LY+xb0-U1t9LPjE|_ElJA35=t}oaPd<3ApDi^g^5Y8Klj-A^N;6SWBCh? zLrzoKlgM8%!1tu^ZmGZo5B`z~ zc%0$)Nvnss2!AEKFEr_17y91JZ-D+x=Ff!w1p0oD<(@f+r}s_-s4R5n&w}`Y{3eK3 z(K1e$uN2`MA$&>xtmE*8Ro&B=KWnHiU7w2Sus7hVd{=I_jXh!@9^MGO)wpYM$%%4B z7Bw}{MrOI6=ZC93OukAF9m8D<@P!HZLYBe5n%B!M2WgL)8xi-_-4SWrbIz3$ z)c1r5!rckNKQX4Bgb&T*_$&xR9=l*2SFI!S$=@PAF97aFd|Uuroi|!gYdl|Cx{K=QaxvEXFX==78nG#`$^uN(|M zoZQDA{tUR4(By|Z;g^TZhnK*w8VWu<0C89EV>`;`zw$2gfNyaAcY~0%C`8%GJ zB=a6~XWP~lfI$M=Vk6d*k{pDP&u+bXM<5W|cJ|0QR|Z%Rb(oEPi*#B1 zCR+2>dd@W*rscfz=(03BA$aVp~-6tfwP98JI(^cD;!{+aFncl;1 zCQT6NE?TGZq#OdC@<7=AiqPw(Ia9w>?q14QFqcr;=djPlh zMTBmIS@qICj{WYe7q0Bi!Y-}uN?;$O z2FJxBHS}{c^GcVzUwO9;W2^3xaKxI&xhoa*URYD_u{eDlujdb@(VlW_L}>2(tD>@e z?>ZR8S!k_SE}64AS%rpuxhd=R!Z)03WCg=LS^bFqTks#O&(4}Oe*Ch4@XKk$c?eA7 zaVq3mBF+Lj(0vG<1)x?Ow8m|jgU%X`Ih&Uq{_G_Nc5uxOpgG}Ez^F1mljmULHKR35fT_Hd3=T~U42bA?F^-<1Lvn?_zS z#!qBt00lS=YClyP4JRQDpPp8nD-y%;@Ta@o=!_L=JS?N^B zxtg6$Hz!RDU68XgM;z#{$O>f(gY@!^l-}l89_lAIJ= zT|X%;Y}Zebh3)z&@&^06ku3XnHt#2olkXnNH=bT6xlWFtD3y3pdLH(of6(d3O^P}0 zyB8PImCTJ*x~TR(YCY_yKU6Au*rl3#i1ok~4N7H>u9Erb2&RGHc@!)RG= zP?#dZ&hy^maG#utco$KMm|3Cs-Y>%<KK~@m=N>D z=@;|mNc)1p+^!8g?`(vy@4$>S0DqX0e;zatt@%4Z^w?qg)1 zNR!YSQKubXf7LX3FgwgM%3#MZN1Gc~tT<-_AM7aeV%M1*HHWuwF-MWUfpXt0bitf# z{qC~PWxz9Y9JRGTn-#mx;z=F`-zntV#51bJF*Ngjw}jGPuo_6yk5~;$!L`W?5vyS- z8*3Y(WN(O=^m-U=h}^75bvDzdP@hB1S+m#YmN%AnDndTW8w2xR@(;rJ)XTz5rM3P^ zsKXYZiW-z88v;BvJB@v5Fq{<%*=4xXDk^tb8O>4(%AJ;_WZsL7v#)-VPnW;WHrQJu z0=JCCk!ACsG-AU~*4+zCrZYOIhq)O~WMSXD%fju~PmnzXnVZcYp9i?-b&)MG;cpT|CVv{-|Nfo z@AE}9`8!~oFNZn~DZgi(@lMoEn5NToQ7iA2;TF$bxe@4A_6HwYVE7ytc2ZE!z^5ry z$-a)`yR_}zuGix2dQd0(`;oEoP-E+J#s9PV{J^V^pH?KiB}Ju>FO<%a%b!A-@wBkY zLHDUZA^to~6ry=Q{_;yzu2{_rgN>}KDZzH0Sh9bXcE}R#8LdHj8U6t21ezNJJSQ&* zn(SbX`bmF=yI~OZKw_%-LAtlrqOx3f=2N!+83ueSeTt9swiQB$?aS!4$}cB)M74k8 zV!qfvO1oqo6>HCHv>M)ze%XpIRBiT{%JyN+T+-n|ItJAd8GC?}-3QeD{Xkl9jJwj} zrO7~X8Jvj))cG}=}37E^%q1?+bWc7 z0an8PkB~JJdJWl8avo31lHgZH@7>$#%U#vbo^><(4Vw=e3farqV4%dpUo=E> z1$>Yeve8$Pmd>5p&NZc+0l6x?L#5Z3)zGw9=Rmv5G6#>&<$3Hxc3zdb9R}*w^-;H< z2I}_HHPr3iSc~$ITA^;w1M2qEMET$^TIeO4YtDB&b1J0gEh?mE&ry1mMsM=y+D^}2 z7SgqCK-VrLI(M|*J!9&vx1$X1iR`~P?oB;_*{3q7t@8c0RO?B>)#{s5j#AMg@prNg zZ(!@#xlprnIa;%{*{Sk>kq@yY{-%9c3n+J4keY9H#o+0QI|p z=x#r~L;B0C^LakL89CM*Yt8Zo+PlX~v!yPLTBCcdoI5RI_7&tUydZCe{(oh9$^Jl2 zkY0!oFG}b0+V^P|ojq-XeWFo8yF_1_T(Z*&+8=F^&QF)@0~BFvSFL-~RW`3fYzwKr zJh^P&99azW{0Zd$omR!<4ZxLM&s=sjb35U;^D5XM+7+&#Wm#6E7eLrOcpEL!F}D}e z#;%6(>7_GnE7nb`)XiPb2H2Gha1g!kMZe3w%82$^0`4VWg*^Y1k!C>odGWfo_APlM z=_UD<(#`NR`n>kh_vGiITkiI~Cm;K+dn@1I{32C(*FApxo^j)a&7~V79bT#jy;T19 z0JCWfngV5WVHec0x68AchkcB%C{PPgpVA~ZsIbR%;hNZBUfZS8dteJ_hOc25jPGTv z?A#QIb8OA4`+$1uGFj$@Sj|17QMFH1l(zDsd;xJd+j!-^zoKpZ+t{ux7vODWyU^G8 z7QR@Q2DWYk9>Hqtk<)DO!fi0ac1=OM&2-AR^+N6fw5ZP|Q_El-1z;ToGzHgDUc>l{ z_~3;X^Gwj9wB*0wVm`3-V%`nd74w$t2eOyZc&OmNh-YGGbv6X0PgLp#GuRp;n``sc z1AtahTMMi~+hAI#lPAy}n8sQHUz+Us0n6=2H}*KkP9{05FiR~HD_Er!j3wXSd71W@ zs_x4?T6S)T1SPb_>)EGL=j4-QmC7a!O_#C9G4(SnqaqmE2 z7TLc{+1?p#C2mO-$4vzs*8ubBOR&40*^c&0%l2C#hwhxdC?zG-?6n@lfqGt(O2F)V zHDt0O3G&K-9}~Dfj%lYCCH89}^d0Z{-mIpxAYF(Jn|DXZKC1mXlwUI62%+uynBv#l zx{22JIqjV8;Ga}b|JiE(MJvWDwM9EeUFIybl-urEl89OzohEW>8!#X21ov^WD{KCc zewT54A+Zp6IUVAzp?mjiSBP}`;|m2*{%Zau3vJ+@NTqf<3Ry)OMjxNar;%=nNl=&1 zTbU;Oi#aZ#zh9{4u9Wn-YAmBy`{FHXqsQMxymb|m)k^tJx)1#q~LG0me#3<<;zq!ktC;mxOyU zy1yXYd30YQ+^f<3dEwrGl7fEzM%bw>wbOkQ%n_kO`jnJ7-@TLVtmAD(`qL&zKf*@L zXbs(aY_&gN{+LKjy&F>Kt?D=FjIU&W9dL1Fr=DZZ#QO_M0n}KEd0&y~D-;eh@61#O zYL`YFuFL{NM{fxfmb*Gr;wAeV?Re+#4M>w|@k*$aEMW;a$KMN)hI0FJ?RZ-J zKKh{aOWW(uy3#f43~RK{tI0KxHe(K(cSc0{Pym(xLCExER5LH59@Ja379|uY+fRAA zQ%BFi7ty`SZ*}hb0#YkqXzwG+k5(!gQ+Rt&WmpdIA9P&)#bm38tXK@4l;i=;}(TftOzL2#Y?PS9GNYDKxWjhLUm8?;(e zOTn-H7y8wG!MGY^sZ|i7or@uw97?6p_ZjjTq0}<;Z6}`XHv?oetnv?G*e^5*5Cpt3G_ zXUOVKeHK!Lz7ErNUFhzR@Lf;7dqb(i(RUO1?hB>P#_!*ZzQB({sR3-~2>R6Bp;R0C zenh_CgyO2sMEv~}@>>XL@Iro1Ay0=yKmCJz&p>>LrH;Y!pQG|$52a4Ro_QO6+8bU! zeLy}*7k&64`M4g}CNYs3kRtY~F1|DyeQHWiU4*`cG-;=QNEfqeM`zZ>1aI;ycUM0 zr2?jrj)9P{7gDB>lXSeNO|xz2V;l8U4t+l+-(`Ag3;G@)-{qd~7v%ejF7836(fe(A za~7ZzU=6@pfRg}D1~>&^9l$WaIRKvoxDenPfUg2v3-C37uLIl&a0|dI0B-|G&@&uB z1xN$T09XQW6aao(^L=}TSLO^~JmSBLA?zk5{J7V>4r?g~{$7B;13U-t2EY`^)8Z?4 zD)izN0AB{U5}-kmq%c6G+}}Vs*wg4oUIyKVb4faa3xFG)HB;z|JP0m=ZE!FMnBzHNAE4um?-0+ld4Mkh>;QNM!@Y7p z33-lzJl_Uj*slPvJ8T9zZ8NlHGvLq7XuUoF094)P5CG8Cn+<>lfCvEWqMJ>C7=Q&3 z2WSLn0%!)91TY!<5ugQNKY*zK(*X7dNB|@OQUI+0Z2&U?dI07FEC4tdU?IRE0E+?o z06qqAG{6ABDu81EJ`PX-I2ND?FbHrQz$XCK1Dpl03E*siPXYWFz-E9g0Otd21-QVQ zdp7_)3-C99e*ioW@K1mj0A2)m3E*Xby#W6L*oSio`c(!90_Xq+Km&jU5C>=kXabl9 zus^^o00*E0APdk5&;>9DU@pKsfNp>ufR6zj4bTs;0^k^c0>H5VMSwwo;{ZMZa6G^e zzzG1Wy|Kpq=w_HR(_y}}v(c~sge?L8QZ~9aZpHEN%{|;_z6D{o1Ka`dD8Q2dPx;o* z3~(O+Fc-iD_%y&(IMz_k0^j=i5`o23XZo|9-iHQ4eI}Ofa?Kn0Jst0CICs6Bm=;N{4oFvAg+$CQ|yaI&yVNN-+?yX z50HlNcC-x-fH>(~fY)&z`_?G-$D06e0h}+5mU%mT?+#h`HKL^@3Go5qi@yRq0q~@k zev-I*lPYO6sW#nH08axv1Mn=s-*DYS*!Xw2Y>?UT7C0l6NK%7Z@lZ93-5vZL(h-=!JnYK>4>`^-5P*?h&vu& zBf!-F*8|*!cmv7}0GI$VfHr^w06y-059zWyp)CC7xd5wW8npii&mwKt3Sn&kh%YBY zzUcrn0S*M14RA2PLV!a6Rsy&H177(k=k;ay_LTr%0k{g_8i20?oPc!!I1ykC!0qtO zFZyuiG;glt5KlvR9$@81>~FYdy$bLez?%SXdHWacTkQZDZ|_s+V1 z>;t_M-%64DL!BhwQ{e9WP#-pB6?uhBtBBnTDZ^gMf9a(8o>Klx&%7W)_lXn~$_&!E z?71_4vXpKGU!E(f;)Mnc%XAaqioK_ooL9Ia;VptfS}?}y>%37f%Gc{f<%Vi|G~Wxt zAnA_0UUwmW*m;?x>&KRH3zTsalyS2@-rG;oY3SSn?T`$&<0jqB-b`ho&fu|S-3Ddd z3T5rkN9FC+y87G-_1RIak6(tfA`3sZ+}oktZ$i1>`iMH-4t0EAcRRibb^KPfj^pW0 z`$c4|4&ePrciIoq31v0w)KNEBmNm#jN|$cET5>K`&_;M6{%w6onWKAtxnSL)SLDHG={CEs_8W9ZZr!E3$%k||ey5)AR1N zsO>#a+xPShj;SOR3>}F5TG{Ic`0es_Ln5*Bf`40E%Hia~948{<4 z!HV03JSF>oA~>%;2Hc7WzaPTCPjzv*i0^{7Zpc{*YV-D=D^B;$ge8*B{gqxYf2|Li zKY`g>F#lUeZPdTii`Ih>_Gi6?i5mqWVH)B^>mgm}sFthm1n!`_!{6$prwe{d_PdcF z%gk`gzY$mteoOZ25sdvGFXVq901`Fq{n_^@uN?xsKJf%7+NFGM7Wf5c1os7Uv;d*&mM z?lDUDs4v|gy>x#P>3-*)`A10iIHmiOFWr+m-Ts#!@X|k}<4I@Pek!sJe9wY!KQ>VQ z3H-v|u;E!ff94PM{KotA{8>NJ^P7H5CA|bCWlT(6vj2rWrsvDgc)jrqg#9xTWEDFg zm3Mg~*w@!Rq~~{X1Mdm;rA!%LH_em>uK$^CP3{KD)x92SB{i~S=s?-M@j*R*w`w%1 zxL({_p40=|12+T$n*x8puOFTa&7w5!O%FgDDNYM~Z&TnAjGaGl{m*sOOPb%Q8B$}0 z=XVB-%!gQhqm1QsOH)`ow9p9HF~RQ!`>#-o;`e1EfBk>! zg`JAwUjH=28t~28a@qM)48+{8lCYfs7kbz}?6gs{)hZzV9qWW|y9^~e}KH$pBg$^J(x+c$RFtZ4pCuh&gBn{*XE z%&b_}oXlp@8q2h}&L6W*f}7B4k|g z-SOUi`}Xnb8*nzR+!3$4(?8!aYxLw}zOwst8_MaZb$4(*N|f1s2k>qs$folHc*#7f zO}uSu=P};R@#WlSTj>;EYA3m}>8zcX>;u|z%;vP;NV?X3>(ra0{7qoNjymBXq^(>j;HesJW${u5Q zm*0SGP=?L7NN-!W^5(v%g!-aK+int0m5gqwfqp%E=#pPg@Bcpi=-62FrtB>p?TzN` zH}xp|eMh%qou*3RQ7_d0w$Q5SC$}SHc-9^z(NDd0o?l}{dBA6@VMFzOnZ*X3=k$W} zvTnUr=unJ;^NyaB(sJ3pFVew^9q;PJu8>ij^PXOus~brz3o%beRiWAO3qcv8m4Q7xo_%2n(Fhv1^$4~&y681=<}=K*L{8s{F=`n0DmZi zR%b3z)=0WGIQMNRkwc2@UJAoNt*R)yH`i>c)2$k&Hor}DlAC~?)m{QSYuViE$>aLZ z?NP5pG4+a$ZxUbD-NdV~&YOX{0_qyvCHv|$U~wB=+tUt%RhW8Jk2BOcadld$(`Aoq z*~(cGt_pnba9nGua)XT0M~h4LbFHncTMaXO7k^x9AI&|5bhZVbs!Y9;&hHX%K* zmM7&lZoN@<-fqn*C1)P6V*~xq>7-q=-!$_1n2}#;8F}~bK#3O9Qr7K%pZ2?w8EezX z8t8Ef^#9NcW=0czI~T$uB)d_W`{&a8Rrt1~2JqV^$pv6tc%V|3A^G<#u1sQGS(6Pr z|7~mv3Y%I7w5hCH8YEW}%N%2Ac*FmfU_j~#YF>O`s9S=tKtS#ZXqA+5pc!@Jc58<) z_t3D>9hk)2rIL{hw8P%<38N*jwO}N&MnXfS+7lF7G=G&>8M2hl1!S^rly`X0TMfpYWF{7xygkSOYs3{))GV1QG8%Pg9gW;O537QRl z@y={~y=ZTYneSht`TmBE8vao3Ey-XmzHU8(v(Z-E{2Myj-ICkVin|JC3ro{%5jXwM zwKlUE>^#V?8;!C?e8TB%HudZ}UhIEWcl#S)#hgudj8D+(0+$W+zYR6*XQI4EwMu!@ zwR3rK)oZ$o0Qs;LKoPBaS?|^W53PDt&-cF!ZM!V3u}q)4>XmA^+y4sT7YLsxas$3G zFCzIkH;?XZD2XMzE75&%8uu*MMfZgyM}~K0S{6$}tkldhjo6|gS+vzA$-n1Xfw$`y zDNI^n&1^i~p*T-o(F+#fLKAQy@Gxj;!L?r1Ey8&+x$~xIiHsQ08pVk6m@>uqhGBeP z_r~}2>iFt_vn%8HJdWd~xV}HsD(ibl$^?*eGihxm-H7*a83u&tjps6*Q0C3Jt(t$>HEZ$;BQ88FNGSw zI;EW{eWeu8tj_YvS0gh_kq**tmkpFK!rzkp2bfR!?TTT&J}&{Yz9Ox# zgEjjZ?q-piH%KQ{alBT=@zdE`QZXkPE&$&4o*stTn8Us~16++zPh7RZHkH!C3e3H( zy8xa}u^eD+Tt!PUG)!w!WtmP)A#{S?&@Rez7vsD@$JYj!zGMf|Hmuc5l5$`44+!Dueo8~q=kS}q$T0F3 z1D&+$3Z8RCy65%MN|x^Ltdx<1IoznWc(p1}OQBX5?S-@e7mHf0W$s1)q*|c_YqttJ z??o@@Ju2)JkP6FbW0{o5@lUGBT1wHaTJ(#x$Zvz19CHOaq{&vahBtFV@xNB~h0P_EAYGste|Lv09hsy}CRA)PgV6UEe$LbUAeR}3KlHLJ&pY(siOqen5 zxlu*dE^ZX%Mx$bHPNet(p7*J<0e}2UR>{WPehj7EP{WLyYXnL#6+0lBvh&+as-2K`hjd{xDFII9?Jsf1DX zM|mUZ&TyhCi!4>`fxEdTqX$=vukQHmvLi>igt2aKvtd~%p=&8esWM6S;mK}TO|o0H z7U`F2+4+0cRNJc|4^~6Od(tp|U%ok;9dOkONy$RLcXQm2uGNvd z>67U73h!3qKyAe!{2SG9OxL15skE@4Pad|vmQu-X1nORIVs`308Q*~fQqz_5c#Q8w-Tt^kXPs8Qkn}b#s>SrE{8DwZ?ztV>-rTsC++4I8(k+j+jI2SsmytpD}k<( z{i`g{3G!5)z!&r6Ud<=LO8OSM*=iZS;QYEPOKvjgR>?e! ztOOsZJxBM}m#`M?Tlj9eb2Z7(UcfBCe_J55R~rpIhgoxGu(KdkQb$A2VAk3h>{JMS zQ5g+g%}`b-^NAMihQMg(F+h)H+!k$-H5zslv(CyK(W3pq7uLtDrI}odw%Zrh!%#XY zGp9xSy0669%o@ndY|;J|9}R0|fGra(+VQc`uoi~WPMPKwP4?A2%24tvV?aB7U*ZsI zu$k(Y=zU}`YAyy0yrkqziJBZ-2bY}5!ZoktOcJha$!Qj@StX}QxH2WDQMghiCoWw3 zmmEvDrj(qRa5a`3Q@ElfCn{WkUBbepmYe{&%1%SHU&b9X8`oGl7omD}qlSFPi1zcC z%7Bh+?)c!6DgRt_+scnW@SV%v3;yD$yQlx6c+F29d++d{yztU3%VuxM@7MQ(_m;Z< z9XRXwvo{@cVm^N8*%v}PQ4Xf$okO5p=h5CeSm4>9NPG8UrgwM7(7d-Nr@Y8}Uo^*) zah>V2$2HZHt+l-Koge|Po^75?a?^|3vG+B4$%D5HE!s6xHaJ(LCTR_tWm>Y^x1Vv8 zs)*kJ(6{fz6M0&V{1xT)^b01#>CnlvLUK zWijQkKtRg;eN4DSxtbePcNvCgviHkkYIsaoyE-<%;Pt1&dOg&87cXtTA^ZuqqF-{< z4uxf>*h#^u(q?AKM@dYcD!rgsad0W?*d!z6EC@D|yu)&cTgN6FE$sHmEz&n9x5(d` z-0GYf#G8S2Y>JU&mq}%_Sx4Ek7Nho!V`%g)2)=eouxRdQ)Y~tZE#!o~(_o-Jq;^jt zH0sHPKVt~XWI!QJSuIUA@J_T}YEY54yap*0dV7(S=D?mNMSCIikFAYW`$_(@=>tf2 zIMVp^s&^EN0tF!?fq#${l!Tx%7BS%xShj_KUiR>)FUtN; z!X~cwf2P~6{!P8GZ-DxrQI`6Cz|#*}W&1jq3+;0KnD|rW0+m$%JDZ^YNtono_h>q) zMpw9NPBUEgpdPE!eX)pWje}*k1L9*3>iO*cK))UqHARR#9d`I9BMFASf!LpcZ|RSk zRUh3|p$#1`%#Hm8Qsk??zk+XN)%S!>=K`L)WV;X(tJAk6bWSacO2h}OiXwLMpD|Y2 zQk0+2V-lMn?teZa?za@@*JB*2#yzFG7W}53o-qHQ{AVwJoefwUT9pueSh7EqJ6MBK zRDPoi-2zI@x$5|7f3LeK_;%OBdPT4G*t-8l7kUr=lky(%%6qI@o>Fs8J8T~w#hZ(= zvmlya^*FZKr!TNWPD*MyBLxrjX7pE7pa&j+LY$?yD5K*F&mzh~2^Qwn~oY zv)5RaZ*re4H*68g#+027_)b#p0*+@n&OD`L9!WE>oO>>km5SE%F}PIN-^iITwI~PvSW0I=@g@hnsxWhzLkFqAZ~VB3dCY znQ5%O{1;i~-7<1~r$;5Sa4PI3D>d?M>zz9SrYy#~UZ-8zyf`4_gA&I0wrL6>X@Y&7 z*Xd)f&O7JIsI5fClr?P64w?T88o~b#Qp^Jyf0|R?`&ql(CT{7&WIeEC&WQ?*9V)EX zO9RRnyiik5^V%p$CQq=>e^eg7OvqHiM>httluFE`FGd~0F?erV!5kI4IBp^dIQer* z2OCTOmCQ4u^*V`Xd*2sr|9TWh+QP&2_F{v za&#wM<~v`FvT^NCt+&5lQ{Gh*miL32^1c#f6QsMZCfzmTw2#s`KZ5pQI!2i4 zvZ(d{dtP?>=H-tAV|Cos%rX1Ys9k4owRU}Nr}Z^){wtz(ogN&G`tc_L6ZnpV5vket zb)r>QKuf_L0pwL^&lo4gM|NM0Ic)UZs z4Kv%hip~M1;23qHOi?##yJA0YDcOrU6;Cry3v1FmzmUd=2|QOX-`#4A%3hB4>wMzf zZiud=b>u)BuLAy6aHA4^SEaE(r!&D?Uet1+6=!Ov;SSH>$DkpcBb(c=sN6=0ELw7Mx>Iw zxQ7`tNe319g}w1yZ(>8`qQb5N^Qdm&N$wp)x9TQ2mMRpSotoI?K z>_jY6aZ?V|_4%mS3sD1B+;T`a2kMvPbv89eX~ByANyu%snu2D;+&=|A9doa@kGF)& zKMqYa4*onko!MqI%$Xq0a=kNTB^1G9jV6 zzVn0i_7PAU%!BW(@cYD9N+su=sHuou9`Y-YpVnbL-_;`rfp)l7M%h2)ht@lJE8&|* zejPsRomG}8yE4`^3ab;Thk);95M@H`p=)K-2^|=k&aTB;qnF zB2(x?>@o%bh|jg5f6Qo2SrPh9wz^(LPUOA^r7ojZr=Ue^ceLz*M3<2@Lu}CQg0+){ z@X2QVTd(;<$NU!8lQYK<8a^hrQx6Uqa{&(vvMSXT)tDvIs zoF+@|ZDa!vSKGE&+4+4`_H6RGsdS;s*E?k=fV8`Li6}`YafmZ zyS3jlZK6E>NT;NJdua#IeC{=9{qh)hoy7*~as%32c02lvA^G4y*;yJ#EA)#Ej4jzm z#Bh*l<<1p*HFzyiWEsF~c&D=N7T7+FkqoOg;b#jJfbqhUYScZ9M9BaJ6yp!ZO z7c#+F_}5RU%DWV#ZUgmg9cI+)<^Dw7+lY5$;uOrSiqNXFR~G!mu}Xps$)DqB*QcN) zoV=ZQS25RT ztX8{2urrbD&k*}8$?K~!(Al{jV~7p<{0oiBon5`Gy=(Uxope)%F5)=g*G*urUl>Qd z#Sn`3toCAqI2Burhf;TDGL7D*><977jRAJLfts(;JxXt(1V6;ZhK(NSKcT&rS81<+ z?>zbdnsc|t@ov(JW&11I;M~6D2Ck0)^v^$l`@doh|;(N}U_ zjjob_f6ECs>bbAi1za-!PV<`fRr4S^o5h_1=df!IjX5tCI$Sd*+QnXL#KzG*y_WI> zeCJ}M+qHjy-Ue`%AdRSV5)rlxPzt>vhWX#QM!`F6e6|0ErNuO@-VWQG0Rv?P68&>? zCg2(_rPzvKw;EuH6_z}_VoPV6U33PFfVzySo_6G;0hc}=&9S2(BvwbK2F?=?Lv;GK}i9d+i3igdm6w4&QAnioG6jLVy-E^`?8zGGpqF*gfeEZMUq=aKFW&su-hR0dMN*5|BIfDL-eAD zlhpEdx+QU)yb7yTO)>W@jHUIj;`&#;wYikxs~=p)OO+%)Pj)vUwf9PFjqH`BVX9Sl z?*Qc|)q7zyI-8cV;#sGFZ^)yUXx`DkN^|5o$lwt;e*t>CIInbTo3P}|#wDJtE*bt;}+eswCNRQJk7=vD05 zZuZ6M*dgb!s0nA$W|_Wk9@d1pU1+ttX`Rudk(8!VUb#1xyQpM76+<0$$Z-S}J=h&Q z87%}un0pS^eSTAr#t?bq0MmoW4R!~oQ!LW*gH4mkjr4sG_1B^jTlil*2dMjVkg`7% z+IlCn6)F25%e0Gf2ccZyTGNyvSA~D|!hyHKa_r9l-xUnkgiQ|$ehX6qcM=3T;~c@6 zV60n4uH>Fp_?A)}hM9j3%w{S9)=Dr$zc{mTtzZeTE`rlNyU~*LrEr>!XMgu3+D8%Z z$k4MF0(Y_2pu1!EMXW_qV~U%A8EDV30GmS&%oSt!;xOc`vF%va$nmsy9tW-=W3?=H z7JREPB;OiBX%L&R;W9Q=o-3m?hd5{G?UXB&NjK`3#FN!j{3Ph{+p}46pAtmbH}Tqg zu3WtHcq4N_SZ-1NKi=L1KCY^I9KUay?Y+s|_a;fxbjh1cl1>+3GD&FCQaWwgDj=Fp z-W1b`kftpH!ZZnsC@Q6ZSX3xGEl_p@WGNzL-((X}T)yg;uY!OqvWV;`ZvCHg?wgr6 zOIrN-`TX0@6GD(-1Q8^)w!jgy&b#CP;rMpH2He zjJlBXaP_`wUcLOzn-Q;Ge$8`!06yllaw&!R0v>tH@1eDgF&Gs|jEa!OxE}nME1am( zXGtT{Z9$YP{P&{}jaBSdk}G z%=3j}%<%XI!Yr_TVy=sp7Npv;<72v|^+{g_AMCCY>ZR=Ulk~GDm$dq3EP?33G40-<9@7D-}>m8e5H2AMN~v;6pW*mvY*(AFCx6Oi^=xTm20((8OBntQXnR1sA6ER1vB{t8jv zpO6Z$V~VgZ7hxNUupbv;`6BGeB5bS(`yH#KxMCzOMX}5F5sc9%2%1Q4(^HTM|4*{KpRW` zM()@0$wf*M#xBDyV84ON``p_{m^Dkwlx8LC8&7VHce*ygExHHNzAw$Kz|VxO)D|vY zC7+8R-^pj`7B!aqRm7HZa6^i+m24=vKu65l?~&OQI-LKCk{a|5gZHFtavAY2j3qUm z((rC*&|Qt_4dCX}*G1FoaSy0tR{e9DPwLa)d})Wd2v{d#&nY$H^4ch6wu@$P@ispN z?)-@JM+t8iIyhe=Iu+uGnXX=aB018YRPpX<(f!kVcU(^Qx>4xy`y|WkqgG*PP$mrx z$-=HT4IC|g2nyx=ns`~^DYg!R;3og&X)M^{EpG?Wz~uIprwD{4qZPF;n3 zNc+(|n0*`V*{I1HZW*1TB{=u`RKdHDs&8QSQbD2hFBSCIKkCKv(l^2TNOnK*T7-G= z`X%oDL!mnkSqw<-6-jF-lR$Ud?p1oPI)$N&Ux4E|w({dh|3JYm2*&%!9bU3r7dfz{ zjST5Yie#ub-Y_pkZkcjtLfUY8nU3~8giZ8-=iWPx;{dZgGv15$YS<0Y7gdgCU7f3$ zv*twD^H#xrCU$O#xwlniL>0Ssf6P)d4Tw26735Y_#F_;LxmxLF7>ii5Badk33S2vu z@D==nF_F6-z9KwX38pBaUPjG1csc++3Fm^OxMv8%bZO@2tyJ4^_M80bjv>NL?LYm?ganF48YLOPwRc^515c&oQ@@{_Oe6dKJ|Kt zTLPymj&%0?10dhQ1i}6pvsHdES&8wvFrsWK&29~i;C=<5a2r%V4Lxy38I8ev$q|(#t+W9)9VKs(D1fT>CUz#dUngFpynM> zxCw0&<%HPqxy$t7bC&D5&8u{r2i`a3IYN(sX~`*QdlYu@6zUtp zLv&nQaoHd#xa`0R+C!19jPqhp!ri8WE3B}J%lV?_(VJje$Mx^AGy4qAW+H+-dCz+&f_(9OLugONLX&KwlO7M|=EvkAKkP&v^V} z)Xz-z(S9ns_;JX!<9>|GQDv$<+R#kV~!=mG&XtuChlApHcgrh9m4W}pM$NJ-R1|;1yU!ydM zeMIQ%B9zFsL3>r3W!sjEInbPKgI!&100{09K{gy)rWZ& z;zDcp6m%u)y;KZpv}f`tgh)0MPcXhWzRo3A!;1Vxgpt+2AsulGp9ddULF+_NUW5$f z8sx!}GS&_3Iay9x@va_?MKv4t)u_f$0U0O=ySjY0%g>KL948)ezAvEuwkx$a=Cn^;sQl zS2+B0I^j~_j`J6FR^VwQ8TCjNeK5-p)+=qH6HVLxBJBwQ4kDT+pq~q%dnw!_VbeIDg7-{+MP>&`POp3t;QC+C`(!v# z<@=#8JK#o<1Bf?tsE%oz;||sHEB95cCg*tg>SS}QUCk_gg7wKTBQ_y*GoxN(rP})0 zP~aNNnOLbK$7w6zMMw!7vp?Uq6v|quV~n7^{ne$tU8Uvi!xXd)l((OPRL;cbAjL|( zRclwRk5JlseE_Asm##`sxp{t48`38-ZQHHXX+buW*luC^y#3p@wgSZ%!tRcsWRJ_k zn&EKb0G1m_=o$GMs~6VzkaUeDQd>$d>R-XWu@8g3!CcPRN-@Uh(i^6bVMpB#kw7`` z`y9gQFWqImn^HRH)it7^C8;RG*CM2jj_A`_Kji+qEc7zO!g`T}YqT zqtd0jQl$Ur^Lj!XXH&VbgeOL!h2i@8p(O574*#-ly1KB$zrEbIY<%Cu zn{ZFEur7{b$LVoL{!Smto-VEVG5*yr_D2|4tyfqgy~%jr27gIwDhJ=eZY zciO~#5a(a6Z4|=rjmr*#9X$a!(?PP+J_>v2gON5Z*S3~YJMC*>ZXDO{uu=7RnEhwl zifSkp%-Hkoe$os9=XyJyqQ|x`hyFRoE=Wr?tNltr-btx=pULv0iRV=8E4t@hf;7@Z zZ0L=>TaoI9uM&BCpH}2`ZsJn$eMTzUsBrAUI88&H1Th#XsT=xk9&*)7NEwe1j!ByQ zP2_DHjt%R`C7p`k+Tg`m(Z!KZ@6o1w@)=c;&`Ra!i5Cs;40vz7F3jn?R*1I)|NRxe z2>c??i?!?kW*xM0z7*EVJu!t84Mm%=##C6z1%UAlCi2$XhG~@jfPC z^-!)TD?$*YyF?(xqKMxO&w}un9pWP2;qX<@N9vepQ{qtP?Zw4f`yfwiq+P|`?sID9 zr9Rzx1z$r`?LEwS3Da$E6MQ6LX7|ieQF<8ZJ zhV8-dLlCxJ9e#1S-Wusttv_X6Tc~GV-%pQ*-cTC!P0V`M|KSONliOiecyWO~^zQXm z=EX(e-eNf~?hpNcN;{7X|8Yf87O`-b`V8q%XkwXkFU)~@IOk6k=VVe~JK_X`Q*PN3 z;;TYFW+w?FCy9~c?#SUe*2uC;0lS8o;4IxA+&Xe6>{HuqhA&^4<>Iw(u-?*!mjhnE zd^!A9=(#0}b*o```KNWKXO-TyTxGe=ReBBmv3xA~o-6C)eS16~*U<74b&EqQv`yqk zj8162_$uKRh|!4`p%2;wJmjW3$xU}S&0Kt~ah8g2$CDOs(!FvMqj!*cXNAD%;AXc1 zus`2HbZ@UmeG`Y{EFW#}@g>r|+G00;A-EHIuWt&=tTw$}FH(u&nLqVs8Z88T^ioV|DTjFEvhgsd0rD_)&a;SBB$`Uf$nR_SD~1 zJT>S%>7 zM7^>Nrf5SYuWN*GxuXe}bI*JkF;ci&LY;DvFWPG#u!I}ntzdrfR!~Pa(whk@CQ@VV9__PE715oaWj%%(eAyAL7enUxd}{)$+UCl4AW1>Xf!% zjmb0NKJW_6od1D)g%icI;OHp6SG=mCX6;3=7IW5tI;KU65^}Ag@7v%T<_GA*{L?!2 zT1rz{pBAN^w^xG`O`}>g!ACc&Ez>OxPk&Xb{9c>zq|yr(;Na*=eUguj+b043l;C;( z@3^=@t(1`-)64*$mUcxEpXRK3@5|W70^WJCA}KooQ#w}9#wT>tJm$o`oU1u~+d!iZvAbJ{9x<#gelT3pp&SSZUM~c?{Ll%e-R}HspM?u zurBb`x-uEjEY0K3!U>mw_ROK(Fb6wRp4;Sib$r1%qmA|x#d}{&?AemLXUn9+EmXjf zCET+m+_Pf?qEBLC&qm#*bKRXUZ+}PE-E~ru7uZaE zLe;zI)3UR&^y-l3-$aYEa-M$+T_w-YKo@q})5#KTe&v=%yWd$^dfgW~I&Tf;`SwPn z)#sDji7#yjKrSzX+)QuHf(KD&6y_I~rMRUc1%&z5vJ~I1NC9DfVOffsDpEk0U*t)F zZ+ZB#a7`nt+NZ+B@ugc8djnSFpBl#OEphSQ=ba0JCv`QXjX=tSWpN4}!|B~H`7?Y) zgV^%(T)Yu}6~=Qux0&EQuI5?$s_xbIP%bBYk}D_t9am2HBpqRs$q84>0C({{$pCM# ze=ZedfG5wtHBxB5R~{@vY4#WIip8DcYx;QlE4q{te4*a-^~CQNWwqqV-&EmL6B6ZJ z+pLJ<<$s<@a-%68BMJGZB`&v08MuS*1Fg$RU(>Oj%$2!2I}&4sFv>=La=BIaTRn2C zdzJ@v^SJV$-u|=7;!$36gZ(Qh=IPV3UHQC9xy1jGBu~z5HRK`7>Yh|iu<$*T$q5$n zpYP@`=O^A^|5{2>Dlxi?+}-PA(tv<+kjY8pG=Ed}mFK#0nqC@Zdzqa@TzewaL^ct} z`N2?EqTXxOd7OU+VWE;WYNV+i@{)Lp9VKnlMq;X$CjhHZk+y~F zq}#%s(zW3Oi{C02&&jpy8+ySe_cr94@Y>|oN8#tS$&GFPgJ?6_~ptKJB5Aj259466>VJjU$;@TtyeP3+E}Z7_+nWH^Ws2W z>eE6SeV#VXbF^)hc!+20PlbLuwQB62FOL0b6ki;B`BZ9U26Z)t z!kS3^l1Q!jwLY@hvsQ*a0nF9q`H-6x(JRRFcBBlwB8y(Juttc5GSnBSjDGnj=^J`w zpR6p@Mt$eJ&*1p&PK4s4s+( z(vOr6doV=zs8TxU6RoZW-w>Alof!qbAusNWd@$MMnJ&HSTY9UMg_G{Hyc6y?tH8IC zr{K%K30HG`>pD}%G!y)a8D2dgQrW%nb<)FO@h%zno5NsVj#SX7+6mu29O+BMMTR8OaJ9!&fL9;_OM| z&YWTY2l_U&3fn>1Z)Ms~&j!<(_-2sgrNr{<|!2eE@#C|t= z%(D=_RN>O;UG?h5r>^a}xkc_RI|vw8WrZFa3^y1xlg--iyH ze&ynu{r=#%{mayP_S7K_L6*Kg7*scJ#dJ3?J=lcHi{)O}ck#`^p#IcF4Z(C8N(^p3 zpe)5h(?9yn{vt(FF!j>(L!WuzpNrAowAV7{AF*Kisf)B=J=?fdl*cxnkbe5^diC#b zeQCiH{hJqJ{ZFx_Yq^7ZbTK_KFqHpMyPNQNOS^ zp1$Y7!uPp(bhno9&AJ}`>D}YDLM5S#r9fWo>91G~jlNyGrt0r3-X{>$7X*TANZX>X z_MHX4vtj>+m5OBbnry7p#8p_qQAEB8iMD`)G2(%E{aBJqWAq6|uBk$;im z)~aB;>UOK2qCh_(+hF!Kn8OdNN!nXXH~f$)Byz(_GaIUJmaZXQO->TJg*h&CxJF#O zuP|@>=y2*tUALLm-^F?#Np8GJH?&r^T5gsSHomJ^ z#4G$f8%utP+tQJca#X%pH)Zcy@20-F1kT%WE_5tuEX&T-BhZs$E>$GJ#_T+|T)60| zXEZ?(8)qB3agT^fI@}`i-P8|jx_J;FjdW{BC>9fPrasR*G|8n7T%r%Mi}Z1J3XGX9 zcfz18QcHXkUir&NQ72|A8-ktYC@3JuFVS<>Ry`NpMsHG09-CaJ(Rej7N4lg?esG)} zf%i>)iou3Ev`dwsah!C&ItAwbanb|m`u#sR&VM9)_22_%>6LNnc_J?JgDtuh?MjjL z0hlS4fA9{NtGAz}-+QT>hr4+!{|~f!n2Ye=eX^Yqoz&(~Mayg*-VU8t|Fzo@3}ic4$iFjz)93@+8PtvmHzc?$WR*4uQU zg+TaGuJqM5*$v-ut)OSMm6CutqF?W4~unHDa^Zbf7sY1u6komh(H!IG~ z0O83fsdI%ZlVg_QD?-QL)q=MaT(myMT+Tk6@n(fQIenXSm5}-Y7j-a5q#Mj~=|CkK zvEV1Vk|^isyGnOrR|>5T5?W@ul6WBzrwn^Svx@gw32qIQ`s*BiIpD`TAZ@y#7EV~6 zW}v~VN3V98&oz{AX|+r*Q%<@Z#^rY=%A8-J=aj4T0v~UTB=$$6G17T*rS3>*VeXiy zR5iZb?Jv}Mi#!CUp_UaW*D z4}C5|w-Pofkw!q2x=Xef(%q~(DX6ve9>{%HgMjAv?Rxnehp_RS>Ico*vEv3C^ZC=Z1_WCzJn z65Tp|BDXv9{B-2eQhJpp*z2$an&0sqBr}PU{@D8|fDx;(|7rZjMdIYL6h^)ZicEi@FhSdQ?ZdvXALr*mXK;mb_j^ zTeCa$VSXdT=3ob&;2dJ_h0rjBj-$|h5c&dyPN2~JfQ9`?cQw+<1#O{Y_Ia=u^a1W( zugD&|z&Y!-iuaer|39_y5xt-Zue^6l9RPc* z0Q0r@cFMU`x9H9)n5DiiGH2BeaMyx+3%G|dgd-&a)8J!&2#0*n`FtvIGy(Q# zHNt8jO9{gR*XT}0e4przUz;-VqWWQ75ytL=w2gWD0*>*`z6uxhSy&OO*l0MQ);$xfeHH8aXD`<1D+;)vi zVU=)4@oJO*6f5{fX1RLhg&ui^`-_jw@>SDQpa<-;C!w{#dUa_#)$||O@$HXgaju@v zV-#J~=Qr%}()g2&S)NAxU z;yb;9zPl1P9+tijcop&p+%4Y2!Oim(mgMS#DW^qUTckx@3s}Q-RkWz<_CSl0%k(~3 zY0|X26nV8_J{8;N{pMk5r(Q|N5_*2_aP|D$0VDK7!dQfkpC9TufK~FX?4)z&Zn1XL z;u{fi3!T$*;hfH-ucuRKf@Ra+C%rel+R>B(??PPoc$h};B$)GP4a;heXBP%Kv`tw0 zQcTGkGJw}E(=>Tg_K5*!xyY@tR_&W`yWQW?C|ybCpAU8Z$xi?MXzkWW!8oO@c9va= zH?<~6i?_6Ta^3q``nIA5G|bJ(O+&e(a7yIue(*K2zq5RDv8BQ3dLO`+0xY*2zj+z> z5;nF<=;CXImKECAz_QDsRt@cQK&_geT&%SLeD}c)Jz?txroY*Z6}LKJbCoGx3(4hu ze`d|T$NuhP8$7*zB=s@sOvILn9!FlQ*$v2RBKptmXBY>>22N_-)Y_|=#c>$Gn)<~! z3^Eu62}U7q5ppZ@h?Jw+gVfIhtWgsE%w=c! zz0}VGESDDj%vi#Y&_b`(>La;=Hk;*l5l@W8hQVj?G5aRs{|b5VP2`R54f^0*y@dx* zD+0e2+%dj`2k50F0PD#DoNq7IsQ#EW`qn{e_?peIL!>v&n0~#%&XcgRr_7$O1D|jk& z_ZyL?0#Ew8^uia4`67Gl?+!2jo}PuD#rkM8uBsQFs#^f;!Rwx%3JT|MI0Myt(muw)2o{}L2sF17H6<# z=>$8HJ%>F2>jV2}F`O7__^n{_$)AGXr{Q-1{0@ZQLGU{YeqVy$(eOJ4etGy!W*hKL zJtzOULa%77OfMtqV0>3j5r59OeK*{+3_77rHg4bLhJ0*1xfA>d+v-cXygXi7bSv@5 z+{05vIek;YJH3$kKSfEB);d`+nn-VX|V_X%UT3i>R zj$Wb*zpc+;qtaiXfB(|Ggs55XC}<@p&v(R;mu!(7gBov)ucTA>a5#sj!rk%DdP%d; z8dv^$C0X7fdE>S>^_k2B*e#H6CTV;Nt25awRUuk3&Z3?wK2%qV1$Kzpty~uRQDl$I zPy@C1EvWf?mmchyY~NHta<;q;Q)p~{1i0vVT{zF)g4@G0sD4#72g`Jx!)symGzEZTc7effUgdytYVKT#jR9X1wW;q`eFn0(pd73 z+?LD=oXqFOV=R}=GFgxgn%_@xhv}-5d|z*rcI_Is|4v*a`SiL_x&irCZuaH*2PqZO zG!=K8hg6i)?S#2U*j_!_Zj7k^ecAG)Wqa3p1NG%Xl=L&5*axt?znv0u_PtOi$?V+- z<-Uz&c%k_u3mI6>J!la)9AHgyq5TP^5gh0I_w`dA zyV9@8So#^v@aNM<`l3tVfLMyY2>itBJgY z3nZkpj7k?;1xQ3vJ=7aYo4m+G?Ldw!`iN$4^23m&VA>Maf^+B;8)%nN_NpP(FZTX`#-5ScE|Nfv_6Ah6F)ZJfY*mkemGxVGT%b9yU$eki50W+MAf_qf z$!|$#Xoi0zfYPNF>ki<%+r*xf9$#5*2Mzl&!~d;|ci7UMT-e(fQc?f? z&;Zo7@}B~;05@j#NIn*q76x(&u0~@R*kEI{rJZ{$b_B?-y*ZTI#INgI6oJKb8B?IN_V=Qy7Y;?`R z-7Ryj0zT9T@CT%(%e^Fn^E~)7TNGnxi);*SQw&TeL;pPo@PwA<@A4qhlvxf-d}qi_ z>1=^MwjV^EaRuEgU5AmcL@-6g1&00SBB!>KX`!#+f)cH3k)9~3x zJi&ScC~x-!#24(Cw0`yHYI4ihZ=YB31*z+4; z&j)CFOugYLfX2p?8`K+g@J-+Sx@;}1%Ze4*t0q_~rn6KW^;E)`WFO{D{h>f4u>102 zla%-W)(Si?eZ{rAh5Fy3{=YDQ{a;V|58eKkqe1I^457V&MY8C1q`TnhA^JIQzs^sC z-t5yvfBW%^F_blr^n%FH-|eEm2}=Ea zLI8ZzTQ&I7q7`@iQa@s3@O>w+X1^^9pKGVxhhMs$&C*bE+gSnqoPLD+8t^^p|E-+r zwRua~+ANQ|bvJQ8*iGE+yNUbZZsP9PP2A36TrGP;vgaP63A_nz8B$Re#EU;7PIU#8 zhVMkMZ*#@K(*(~EyEAY9iKBc5UN(__8Zc4XK{KTa{pAPHTR1a>?OYgbSPL2HL%?yq zqo7`yov|SZjYvG0l|RyPHP^!&%-fG~)OTqB^sgT1;{>e>X5@Euv{);kKPG4dpznF0 zKOty1m}P$xC6ES`u-RY5PhikqdM$i`Z68I}4O--*+e}^)e&;0cd#dVb zra67TiMnCoq(N?QF1eTkQtTun19KBkGVeUCV_w~{RJQXl+=Xh@`J+kN^2j9cM<;Dv`PF<_no+X9Q^|X*8A#9H-{j=a^Us@w zbj*7f!B-I}7xNir)q7A*LMZ!>Y#;kPeIVWgeTIN3*UniVue%7i%dS{lpd|3vtzswuqOZpVc+8b zd)$RR4loG&9tGH=F6>c&Ju2Se9)nv0v@m!2bi>rJ%>}xfmuBasjb`is%<}Cj$_jp0 z6;jU@KrU2K$9*~7ej&Z{G#M*kix(7BCq0FFC`rD&{r&g=^zH(m&G)ci%B*HO#(1YuP1j8OY9omeTOxJlZ-yJITPeUgL zjEGuIYnWj~iabponf{S>19^M0BOM0v@%Ea&vhTF&dz6T%kDsXu%_U@OL8aQ>9Ukp4 zhS#+l_${JrrKsC!hA%rZ%fK@zJCZPF`U>U4d;xf74b(CUwcvNwn^1=g81|P{d>!l4 zd~A3vIz%4fAmQ*5(fb7cFsJODu$O2JP}7noBWB|4dj?R7 zd~z>Sm2mdqi#+0s*Qo81(=TRW52IP4DJ;`J)z}dog1?z1jWA1&rykhZFti*)Z6@@D zmRmmE7+yLJely`W%P80Brqa5Hx@+iq%kZg2CEgRFv6^Yn`#SH2X_(V|Z=cK$>oeHug8#lh;8>QFa9zvg-|eA!;^; z?HLC0Rm?Vq>>&I?My|~=aGv^|gufTC3#U73;5{qX7Bw)O>8_{nxV^w!4z&)o)dT!T z0B0a1L+|t_iMbVEZ!d^+uO7i)FiE_lMhPt9n0k zdZrs=b^>}T*9NmLHVtyjG;r6+bhki_Es)a&*9JERZVcR3a9bhmOh^l3r3N5v8^EB4 zV{w4B6D->e>$nYmv36(`%-7}d?216Hy~)V*Of`nuVMM#87^tZ^&##XQOCM8=M6gwP zN6A3!n0;-0kR?9K#HSiP$#xi9e0^^ux3H>vHPod5dt>tExTGcg4wSw^QrW?hhSrg! z#LH17#Nu60Z@dY{ajGHgB}$%mm%>^`Dj`}(kz~}zgRVGBX#TtpJ51Vd)VX$63iGuK z_XA&wW+}{p0VrvuC@JQa)a;gYv?{EQS|V(JNnOh_gN+94_%iMSxRdYf9|8!~_d=ep zQhcO4-8R?Pv{%>*_l2Al1q`p=z*&c@0sTW(y^*s03}qf+|FEVRwfI$spQZ{Qz6rD#qbgbyfS5GXk>~P9t>jlrL}=#h5dSr}Ry63r50OD=>#B zz1{%ku&&8))(h-m5Z~GWd)OD;gB4XKoaY6=*P+B(y#DiyO8f9lw3ns~l)c#ivsBPs zQODj=ap&MOO{7CC!uu&7hLouHp@Q$!o&)WlZx(FYi|_$BkE9`~!N4%Sn41;zM6_v+ zVOGfNb3qHo`~}_O{BsoQ;)Pewkmnpl+aQ^ZNtg#+L8Oh2vkndAaGZ^Ej0_7I)(4i> z=)?QoEaq(7OW?WS;>pSZlbvTE1rpsHK(VBujh#jz_bKdNd-cX1BVp!F-^&;}tc5$2%W`Sqd%m223=m{7<&lJ4MjZofv*j+Lb;N|iY zY-cPZKZ<|Z<7_8)X`7bC65L5*&!Daw=o!HGkp`I1Hh{06bm%TN6{66GSY`>7wG?pp zrGW1*dAtG-(cCs>nQqkPImY(wTWr7g9aJyQ%VjhV^U1kpQYzSvtB{4|dx`dfo3}4l zh3*ktEr>m!oA^-JxZhpAD<;iXsk3YY%oah@h5W=lBIaVJ>cr-`ka;d7QXv~sM{gdm z3j77j?iuMks}D}9sB{IZ_12U$A~n`shVN}u>hdM}44fdi(wrFfU6S~PEAhDL#lGL$ zEb*9QxYHdA(FZ|tapy!RtlM`!X*v7UEaz+gaXDQz%Q?AF4*R6#q-vJ4aguTx-MzLK zHJDP$Z>z!*yMlaHRAP_m=6xYj#WOX=k5W;NX%`!UQ9^19>`1)RsLczDdyH+`?mK3| zCfS{IH{I6|GR@=i7;i+GB!D0^&yQ1u_3$QBa8zChVJD4ySJ2oGHSnePq1`Q$-W$q4 z*Nx4xupu-P%rP8hK+IN%NlX)QT=Wga)d40kU=(tho|p*43>t{J=S-D$c%13TyNM}h zLz&x1Q^_h*rIuYmp#e&Zs}ndR@hPAe_Sw?PIv7oa8(*&uCP4 zG0WHJN4t1QHuz+>(WwOCb}_Hum-Ykf6;o!O6ytdwj2gz>H}$e$P(AHD=Sgu6-44Ea z#xJ{evCL2QHqKR)(EorRbMzq(pt|}AIFA(PN!Yo9olrWQM>^D`?^WJj8va?jX zKL-%N9&w&$_l0m-DcR2%NHwmeoff{AyWd*}->bXdTSwoE=RlI}F0bk4jd=1#+`NOu zyh^!lyxq;2>(KAKwPUtTP~cKj7;NoSr?rb7ww&6wiKz+zem)V8I$qs&5qLuTWTEu%gop?`SpEeg5Icb5B2;})Tyj@6f^YlRCuR>;C^6(xz z$puD?#o6frrxSeUGm^Axfi#slsRhOgsH;~F7yWrYzCgTLEes%sCwzy5=@YNzpp?2Y znw;RP-OEg=@nul9y}(16TVT}H;P*?r{C;2X@cS)>{y>~Ira~ijWh%?6*8^}qFuqg4zU5Dv}j43Nw zM#Hi7(xj5aTX1eX2vFqQEWDYuvI+aVcptr0O=b1IUoc5Zt*-~)RtbF(_KZ)JCX(mG z`{aS6T_J3zUR&JnN_;3$ zH;qI+h<%5=C)b+DdvdqSd-9MeWQ^-PJWga+YU5%9`6YCm!`6-%@=<_aNyWdyT)5g( zuQ979H8{qs_S7KqQS4j))-L3d(3zn$tAdN7-?b!@cz#s*TnPC*ezzamCmHb#gsi_J zuhd#US_JhGuhfww-EozI{2t#ke+=dHsrxavcGX&ecF7YTcR3atQQ@wq!ClW0JW%&M zYp971oL0`0LwabEiz|3?78+ijoP`jZ4Q1v1i~{$~u(Th*Rsw912et@cgQ1MvYZN$d zhNNDAIRNYP!1@4|fxP<{@~Xq?{zhF5KAc6whjYBkhjTpKH5XU#;Rrn;OH594fHd5~ z91wHI%a_wed^w*DmH2X2g}i(@KOw%HYfK!ctIZN$&Q%D3k`}!+$@Dh4Qq`EA57t+4YUa?APzx}0f^y3))M3!hN$60 zs^MfK3g0atUna;|MnRSl$MsrRr7emi&0_M&1^LGBfj=&ZFrFE=!!|zJ?T?N0Z;dc%EBw3Pl_;JW@!q0+V6n=%a-zSw@rF5lG_Zl zLn8Fof6#`z=bb!Kr7zpDw;2UpF(cB&THZbs?MbspjW+|4_Rq4g$#WTtN_DJ@{lqgu9N%9t!zH*r1Mb* zYkHJ@AoWO7AjJz(RM{wt6p>PjV3ZvpbxY6=xCvS|{L=6nh}6)jAA^r6ANTNGdvV!<9OAZ$_osqPK{fBkr8Vi(4!`6R^F4_- z#Y=0x9pULk0NBOmMFtI_d@aw?8t4?rPCfiMKF+EnfdI{y|L{2%*DeyZd^u9r9-QWd_=b8ey9PL*O6d9}X7_pW&t=deSHX=tHi^`0mh1{4@n@3VtxT^=M zOz%;0yV1u=*0-k72rHzAW0Qh(+Fa*$1HVVWggzv~n^OR{S1T5CAVns1nUPPw2Rl`{ zezuU?zxW%$~6Y+JHxLOdTA>4o?UM^@DqB^ zhSl#GmAcQw+66*iSj=yUIL4kIpm9SxeuUpq*W1 zlys-~tys-_B$iOE->f>nyqo-^4R!_3sE|#+&M4VOy3TOytBrydEaW1E(YAkUmUP^E zb?{@X6T99J`orqVc+C=Y-hJQjYA``P8vrS4FgZo0SBUs6Mi*e{rr;)ctCgK1J4RQ^k6`^7W0LbL~c$=QqF{7rLBKs`L90x>g$Fza|;an~Yj>qEy#}{gZg* zxKn%Vn_=v3f$@3K6gnGAJyv^NV%p!EY`5{R?;-w8bMk!w<6qlD{Gawv{;PY4f5R-D zy_Nb5ej3OAz8U)a7NZu;4D-J{2|W$tUNLLa(;&`%&a@|u`{Qon{;-?4=XVqL>~7*- z+D+UG6zBKoT}Tn$cN=`)kLYX|mEN9;a<^T)f#A-{9Y(zCh`_-gcurs~F2sz{|ql(4Ur-3_~FXV(b5X5zUj^fJtK&o<_{7g{{d4i8M1>QqZU z7^d=(>{g>-i?GnvK6l-yEVq1z;p)ZGMj>TBd1q=pVp8eb417;*l_a%Q7WZ$NH7l=c zc+XCe^yMgP_D#6HJijL;G}N5fm7!ZWoHE*&{d{~SqkB$1tO~q&s(3#g zc-U|T?lCee?=>=+9~qg!M-0b#)R=ITHl8xr1Yd+V6F8;!u^MW=6=eCtRk#+}Dr0>z z>IBT&`*q1KJ>KWh08Ha&-)%VTx6mVRyE-s`mP(TQ{ZtzEEwrC@6Z9H{yByMB7*?CL zx2=+nv1aKN)zu*ef0G4GV#;{(s(6oD(E8lu(W~KIU!3sbyIr{j3r^*oMozjDR@yz# zroF66dGH8**ATzg7~=QA?|%3_U?6?&L1UOdWK`PKOMAX?R8m9vBvX=-p^Pwp$dZtX zqrk0v$iCMYVSy0RE=2e~09in$zX%6C;rk)1dBP7sI21yDfo~IJ*nSWozECOrkRj+n zV$Brr!{5?-;ZNb@oI%>@vMYZE{yA-&{7-|wh5VV7Pa$7R@4mWh036ZUk9aaKMC zsS<9g$H8xdKQr)iV*&C=fIDH&g0h`~+u`(X2e&Z7|CR;kM-*_BO|rA{Zsb_9aEEuC z+u=-2SX`a3J0Nc&hK8zgnk_3c@C#!R z%yZ;1L;r+562Q`0+$CNF!5z0x*719P2)ZP8YHhAgAa)qAr%!Yr`Jat4!+^*Qw^d zlb6PQzJxrMg?XscJRFk@{|IYv=b<0x)yR)v7Bz-4qxTUV%`b=8h&(lvS$jW)X8}gg zpzPXpN3tINGImF5r#&?C2;^xFGz#BZbcF?+6s zlKzK|JOS`XC@M2vsC#JS#{ipBBkhv_w?n0LKY_3rLVIL>ms^R#uo|$=gpwI~z!(~N z3Q}1`=$j<;41=vF#*wX-ug-~9&P~Xo1(o}3$Zsc|d8=i0c z1%&H7@xO#{*c1MN;lQsX1&w;Urm@VrUl@HV+)CH|(m*Sxm}XS{AH!J>BbWUR%~zj; z^YtDnH*%MeAYLMxnd&y0nQ4|=dl%F-!_)sigm9}TdOeb37GXZJilnHA3CUm2tDJCgm6 zQR{7U%nr7tST6os19Kh`u%v_GfXLauHk|mcja>XUkjwDAH9bpr*i+@P8)A#8@ zdU_#W*W6$1vLs89e&}zsbW7{gx3IbD*(CFHdZAXeSHrV&N!L1tFD5<)X|>txc-HK{ zaVEl#BRJ~W#j|ZTI|5?FdxMCXj`qVK25v0sYUZf0%c*tb=J}Yex;mrsJcU~B4#@K) zy33pW;#-fS`2CqREwPZaq4gHpRbD@oVDD{R!4iq`+7aG~@adis0UmN|G}N(luXXW( z3B$j_YJgJ$da^lmYJEjtsk7O{E*NP^obwyu_gR;oqR~5#m@)mNGx;P5sY)A?p|+G- zM|ReKOB6oA&z4v4HZ;y3Ls<%jwWref<~_l$rn5Dy`jd%i^w&>+!(lZM4Xdq+q&7ELGr3A=226cw>-gnkM{LzHvM6-et_44Q|IS1MW++%V-2T z;V;h^LXW;B4NL!L3`xJMqVwr4-ts%ZQvMHC+%xcv%dKjgIrt8nwf@gQehBCdYZ&~F z^$eVr&jJkAuIoqLh9N_)%8$CxGS=^i&wmJ9tjS@&FW$AgP#@|f<>^pfo-eed8nlEg zf8OXL4xHc9o!e%nq*e04*dh*bz+Jim-<(hS4OMdD0^ZL|S*g%xB+5lAwa?P~>g4f% zpm?v|Yj6B&>p3^SR3=Y?c%=-!UAtD>&l#=kblA5RST@VqFBl#z$k6gS!qW?-?~i4V zJ@3*#oH6Xd1Ia4K1iut}684n2;J*xEa6|sJG&u2Gk#B8*&(AQN2UIhrI1_&mJeA<) zZPkc@?^ze}0zhN~<>-Tk#1g*(`~qsNtCEdF8J6dby0Ui$(hFva#G;7z63RWAu3))kdtuKQe4aA6a0btg63+= z6m<3ScIKo%0zNl1le4jU+Fh)HL_o^Zbpd=vBB&^4AQ}=GS1yUN=+ddPV8&h`hmmetOKamMVE%zG%g& z_*dMx^bwYLH}XS_=Ft&0mVRn_|9V#^D2!0vLK&pt&e!2)_+h}3^BGBT))?xD_7UlN zcjS;Z)bl1`_iEuaR?RFs*J{w%((6@K19$P`&Kb*wy5EBHvf@?m zVT)+ai188JG@C4>>ObO!&cqOZAxhSuPn_}K}(`}^C8yJFf zC(In_HKR`ovR3I^aOSSDkRtt>QLtHCXv<;r7VxT3m|K>4CwG?q$q<^iv5g-@W!J)W zcIoQ|QU$V0-!O!Y3ro5KHSyyc<$0JX7Eh|-`)3xIJl{=deeZIbgDA~ zHN0sol62NH8f4>kwhdE=GW%Eub5_AP`C6GV*m?tS=$Bl%797df zX*@KK%?Y&MlIw==QRgw_6DG+WeiFJ;CiRvvAId>@Q|l)7q?}2D&%9oeeHNafsO@tWu9yH)%Z0#A^_eROtx&pku`85cTKr7*^sljytj_N9+_ zmg3r2`V#6%?|HJ4`th=kehq6-=oKa&vgGm17JFcgp^f-DLfA{|(UQr&e>X;aiIDY9 zK6x2HLcXDW{{fJ>p?vaOd%Ya;4e$FeBiH>;fX(yd`nQ2R3aGc*YK$MgFi_8Mv=3rF zd4#>M!feVMqSX6v6fRfV7?!fjz_AckNz^KtiBFLX+PlV3l!ftR5qmA1EDD?~r1kwy ztCP+ni|noM#1Mar(&g=2DD-O);y*_h?wOYp^jX}$AP@)Xd5!;G9F)H#$hKf^x65Bb8xyTRY?(u_1^p=VfUi{PB94RU^_uKkQ{` z*2d#l+L3B5`JUmx5Bo`x>nix4%kwTO%X=*3eIN3^4_NDEv>Wa&?}D`XkFjf0ezVKJDh5d>k6!$Hh>CcCqW4x7@6ch4C~z#2kad}PUk<3OzIyn znwQMtFsrSK^dA``Y^n!_U;kHV#a~_7a`1P;DzVS$;85G^zVeiRgWP}cz`g{qkBvH4 z*Lexw#op{?Gg&tIF9Yo)K&av=O#fBdt25>-jl-qemXw7LOjAkir;fHecGSDHz1zzx+@TN6WQj3uH@_lI!e zLaV^d+j=MGMmCpq`cDtbsO6ZN8o-`eSS-%c-1owx6W_7rSIRL0$17U!iojq}S>c&j^9 zGQySoG2x2%asKzX(6tf{7v7YZ2j|N0rtou&{d=c8WHp6N$r~Ro#s7=uU@J=b6jIh| z^L@oOd&{XSmGd@Ix}q{?-jXVL{BlxV*n$>E!ejg)i&e>0VtGSW1n@N;9=9*@*~FJx zN2w)NtGxO!%91vE%BxP(Kxw8_q$!^#!Ei13p;D-79D**q)c^V?n*ZhXnY$_X@|5hE z16onLgE+4Xbt`V&-t-7pJ#(UZ93Lnf$1;9z=<`bZtU1eHoDb#g_lIluV_=ecA1v0Z zR?b7aDU24K?jXCGmUJO>$xs|-k39Lh-7_rmU%|Y(?SgI_EfZSEy!Ka0X+ouSAoo_# z;A*7dpCC=3Z;~|F&xdd$T#JAH5FQHG*838k1g=g3S0;h$lfZr9+Wh?1Bxi=d3NCmi z17X1j9|$KDk*Yec*wcfgS*wJbi}xo$1Ne}whllKN*kVI=B#b&%>%+NNLwMM3gx{2K z6wcux7|~puhlkpg@KBo?9_rA-L$iG0T*4nN=hN&W+@vmy`aQEy0=}VUp_E?K?+Ng6 zzS^LBCipRoTHgv`Oiy?##z8AkMwPp{3($rzN~i9Q{!;nVv^6RxR#whUvZ-pGmqBcY zoxF+om0FaW;eMqG>UEKziZZzd@Hn@vT4I}k{useL{iLNTZi z2&9fjeD^uLpYU7S08c#vzA4F~n^n}UN)oR>m6qgrxE*Z`^ho%=twwK<@V5QYF5*ys zuaf^TL38nI5_01ClP&CPk`rqS3%dBZ(im?n!-&ed} zTb}ppI(35cHpDc$qVMdQ;M)P7c(bmo?DqelY_p>5XhqqzY|wk(Pdmbe_tV#k@2AzY z*jeFPI=RVSygdtMbGLhsJ&3{%>w*^FN4y$~*pea)`9JUI<}`j6$PU{Za_-+EC_Q_- zsd~al1#`pV~KENaMu7HM_%kdu2Ov7T@0{XkT8u)1daugS~Bb zIH$}B=hV5yws~nn#OIux9VU6R~zivTT79eURxjgUY@a6%4pAyyjR$1O~LnlNLrP=?>$-KtA}`&qLzKA zayML>8)K`oPA zE1YM0!^rIeXIL^^&SyJ^?!8AU&dR=UCbKY{8Qd>ysbhm3ExgTHnT9@_+k$gqUdsUT zvB6(wWj{c>0Ge636ny)E54GJV(T(Np#VvRb_j|@*2AyBGMKxFc2sKJ>jW(cE42-d$ zNaNdkJ)Uq%*SGkiKhy!P zWLt-;meMOnSc`PHn&*dg(90C-T3`k$} zfLNjdVNOiU58Mq=zlL|`!EY*zt5<(WH_@T1_ZiFTmFmlPnkdZ9o_BX)NfOFW@L$37 zia^P4)N2L)2fHomKzRp=lLTDEy#^qar3u?hweCh`y3K6QT9Fo^PE}jX@bW!$K}#iX zMXk3Owd_qN&tIo|uJ!-1_9bvq6j$Tb$4t-FJv}`K3j*7-Gc4mhJF^S3D!Q=XeZbHQ zj=M<~5bzv!S41Px03ImD2#QC%Z%v|c*DGH6 z=U5=W{|CR>uB)r6>v;9vt9OL6ZRqzm&$0%}WFo{2N}LXJ)!JH1JNwfC=bDw_{o(p< z(4Q6nW`@mWyjGUTE|Ce7-H`B_kzAHx`lH<}+Kj&=o#=5wt&YmvAg1c_NE zcEIlVUb3C#Pn@Y5u540gGX(+W;CZ?=7#4;H^HZN;QwP!deo&mr1lP#GfebCb1YJ^% zT!>|M1CF`b&+qL~=7N8_^X||^Jm{&)QkGM>EJWpw?Q7glc?9izlqK=>gH>lN3$YF2 zfT;s??$z5Nb_K)?iX8&6jSw3{u`Z;n^yz9rpP}{|ooa8mTP;KmR149A)V|m>wNF0+ zpm8VeE2$8ksa7=67o$A0l+RveY?UOjUv|4ut9%A&qkFOmcovKU)E4nC(Az)DBAomg zwbmc+k+d$_!=k;K5cfE^!Kv$%$GZXgo({vV`2WG>I;f(|7`?kPhu=0E*iiC%E#Dk1d_^P(?iv3kQTiXCeW6n?7 zh0^{LFz15s9M&^uD$sK{HWr)-MYFv*Zim{M;XT@?Q=0KibmB%Ks&R|V2tG}>+slX2 zYGKYyHRZ;+Mj3tvy`4w;LGRnFQ39t%MHG73IFmbtg$VCqtsgblFv`K znlTMnW8G@rn66^Hw8sX`A-_ngafaHs&bEf>eZmoHBO8f%*ew}TXN6s~@Kq$D1^peV4>iK)EAk&{ z)X#adQ!U-kx4=2vvwfP{FXhyMxpTrFo48*zT<76V(Z_nWAEBa;rJ`xU+D>VuT$KA6 z)Q2KLl8LflS6SNui}}+50Br}mCWhzC@QDL@4$9(v`M%8&v}fL&Wch6zZvl*MTLrpL z1H1&|);l~6*XGC+TxARF^*)e}hbIOD?v$j=QDTOYa}Pp|x#s2YcmHM!_G~7+AM<&# zIe;N!0fu-Bf1at5-#gzpX7sk-gEVip`9x-Tj6f=5q!Q~6^jIGtK6PI5UY58RPm%MI z7qR>YGt@T%0VVr*jLi)A6zfAMqhFm=nNJ;l{U}J88Sp5W;4X^mwG1 zKA$vlPyW3b>cfv_9}TdaS7yWe;MmbS;>bQJPtN{!&NMmgjF^bM;K;cPl&a^>6(9QraI6yE#Z!o zIHZ(P%_vWIApFI$TUxiXPGMixv+YPVC+vyR3*jJHW=ODp;b4V0PD8l97t0Zt84+;v zu2!9ENW*N-YaJ-P6U2M5k6E$n@mBFn-cBPsAxEmC?Sn&M9~^Gu#Z~mwY$qOpJ{e$z z%;k_LLA(QiJnek#%cMn8rUTwL_)bW3xKwXva3Y=QM*}S|8{WT__Nx^?TFr;@>Toz8 zKSn)3@GyL~hh>I%sLgYMR&N$VlG`D7JC5t0qV7r(YMgnT%4@Pz9L0z$AS<()UH8JM zPYY*A-~F0M2Mftg9Aj*Q{*?3>O8pwqu|Ef*mu1@7!G?VPY2ikEehjTn>s53crzwvH zOyNVIQH_ra!ZAo`hZ(D$i@j+sN`3obnA@cX8g~w)g?N8Sg9Z94@Y6A&6OXEmsI;5K ztn6ZixyQg9a}PnrM}^tP(0UMR=qcX*GX1ZUm`wv$_-53P^c3 z=bKjBRY3XNnE;)8jbl{{ekI#7y~c5>)=C%E=sRePas#V!{*q82G=BlX0+QPn) z^6|Mq@4b>p3%w@Pp5V1}e=oEXjS?o16`?9+mbXJd1jFSYnO& zvi3;8b9BD!JhfK-kKPra1+*q3@D@t4ZL*WEEkI91oO{}Tus(}jXNBYG#=QOcYOSxb z7ScUA!Nx%6m-lB%;W5sm&Bu?oVaD;JzznYgW*o+0h61~Ley^IJ(?_skj0Zh;&IQa9 zDe0|1QTsew1ow^ukpBwlQQBo&N$xl$3agc&X7M|sH5YqvQ5esEBa#Eylxc!h*90dZ zoM#UjYnXC&v*%v1XHG%omIxm}2}0hE8==ujETmN1^@{KIHy?<;bZtl#EQdyiPjhz) zpWF_f7wJm^Y~r2|k5~I5Cjh0>3lz_Mpmbow^q#QL@T@7Qnk{2reV)vBz^@4azvk~Y z>^i;*b{#(o?CPn4UG-~g;V5@;i$+QR2Bjli>~^eqJPQrUa4G%D@)hn=pv{nblrl1u zIkQxz{%+#*(dvgcss5o+>laI9gu$KmftNX>RHoKfd5Ce2VQF71#qSMNyodSNZeeirt6SoT_lg+1LY`yJ?|vc>HdQoqJKbRAZQ$8ol_cy1PzRmuk8 zHsL|xDPgnnj_}0_&*L~gp87Sgg60T)uPY83VNkyczedSlbh@gn5_nz9m8VxIOK^RA zt#w5;=L5J1&!YKs`1=rAs#=#WRR_%l;g!tiFQ&WNAN3mJispskdsxWJaWj|m{t?z? zNe%&M==@2fGZ7MWqsd{f9T}BpIlG zj^$iA7p{euFswW>m=n4f=T)Q*#MPpZk5A}5QV;Go6faaq^12v#Jd9L>Ka;a3c-|z0H)xZr}~EgFFP~5!hqDBIDapQr|H-n3NZ8?}D!iu!f1hj`8oC!Y>h!T1uN4rYqann*Yc z%o=*T@8+|XfLR+#UlHkcA#ZOxP_8#XjX43W46RUW`N_P0i|hK=RoA~xST|PJ3Nn2PyS&^ zKEjF97Sl_^x`_02$)*j;TU5$$JLT69F2wKDxE(>KO~z0ISDa8LwG}!$nQ1U z_&XzPvc}^-qy}v}1hscT$j3SmzQK??WcbQB|H|nl%?}&L%(lT-l0-o2L*r9!&#jiu zIgWT@C4LmvB9?3U4b?KGjr(#8+WaVlH#&?!38pP3zbXr1#y=<7H=vN_%#?;-5BPI_ zv}N&lyPx|B72nV_p;N=1_5JW#))7CFAunJL7SNitD_D!PmgWC+8+@0{luaoYh7Xkk z@_-qWx`7@%hgomm%B-G^@VkLo??8CTwXi>55iNJoOhK8VdALN}D(jr^+V3OR>M)GE zhRk>pEkX^M$t0`=-Gi(Yf+tuIF5RAA;j8Rc!xd8lGQbc1HO= zV!U8oO>d-X`&4jXVLQX^=J37WA z@IJrG|1@5?%dfrHgkF}h`bN0v*Bj!j*KNU@=5*MP#OL`--<*?Gv{Q7N%4@EbDMncul!-rOCwZqr zp7S1u_&NPf9k2yzNe9erXFJ8zTBQ>tR8s(p#m z)B$rNP{7=dcx7!JYp+qIJO>BU4e?~;Rp~*LSAelc-N!SN0Q+3V-!qH%V4VPwT7-|J z0sW4I0Og-a;@xK~$!E&X#>w|Lp_~cCUB&d9^5HJLZ7${FZL>u43umeM$H@77K7W}L z(4Wl7c#gtqe@pfVjd%e|RIPzu5tMT{Sw(zSuhVmK+w>RS2gO-6zk_tw%rjvIxHVJM z$NE>h&W6&LN4iBE+0)dLjjK|72a%rvJ&9vxE#PZdAe`hnzzgW~2=B?P6KhY8t$2F4 zvM!Xn+Dze2v|Xd4&R03+%`S&iBZ^+Ui{`Jw7NAL8Dmrr~%2{<9Xwi+ZYSNl%U5cxg|c=GfEDvo%qs zQ)<_G)2M45X`bwi4|X`#``fj512N)#Ed!howOMgB_r*_E`{D>cFNd|2Qu^WpDr!dc z#Rt_!{HL#}wK}+Ao0jK%&K1!120D9|+UFqJp1d$Du-f+mbnf@+u)5*I?FH%%b&W0z zmuz5H>5=P*3kr4P)Lui+aae(nN@D-tu)^F3G+gQ}giTV7UpABal#}*g7Mxya(Ly5G zgWFj~f>jKs8+sz(5}yz@-}8rU-#d8!-)AmXtH04#rehUO$C|z2TK!~|@ZM!A%G=@H z63im&)8X9J2kYb*INuyk<{q3+IC=1d?tv2;N0{52a{7)QA{cTL(S1D&PE(Pd11Pb8 zk05dp5$@wC3bYeAy&@3o=c6c-%r1-~dOcsvM{yR8qJ9<11Idqcr?%y!y`j!iXkEYx zS#YWyvZ1YjC(FJi31ItF`IycQ@}<7`6vB_7R@qv7s+#&IogMF5{il>LuKrW2Li9aC z(VPJ%Uf)7I=@iHLvNzEwYe^R30K9jZQ#tEK=zF)wlF$*3ma#UejJ0hgj&ydB0yy@m zVV5X$r`|JSIJS%H&Sy>!ttRZ&(6M~!?2xNyHLJ^sFLt2!q&j}kR+}G$x4qAX(T456 z!V4K;)_-m+GjNt#vY}gbKUmXNY$t6Y9Q;qImG=?WR_jJv{ndD`5$=FpR>BV=wfMoA zcnbbDe1T1A8V1$-4$9)<_)TGr@Si^6M3SL&;y=~${VQ$x{*`s|{m%Q$MFg+%EF%NW z+?AE*krWtF#Q+h>LJGx5*CBBZeAm%Iob{YE9rBh<;^6}!e0GwDI{=q^H!)X4`kL32 z)%S+{Pwjdp0sh77De>m99v&V;_3&^AzW$xWY}+oRmHZ~%?jqh9mdLwF;+qH`yY31D z^-uQ4NAr{M%^LY`4qMK#VGH)<$RK0Yd*KYaL-;1(i3bw@hmmE-1A=kZB3=tA2LTZt zkox6=l!5fDa7OOUpRHQ(E1E}!^UTVBQ?=$|Y#E#(l&&AfHS^Omf^onD?w}gEq{Vco z6|utGDXnOB1>+>Yb(^g@-yKA(<&fYU7@b3dWZiQ1IY0wJ&&|2P*^EN=coy~3X)MFS z`%*!;*C2e!{X-+~zRQRTB6}oOfRHs0-CilB^9b2^^ioefA>8#B-Z;y`L2B*_g%n5o**1L#Pa6lbW>}Y zYgBtxvV8n<6+Lz7gk={X)(h{X-ZAR*J*i&(Ji7t`>FDPc|)s6+*6jEE|Nd1a5w37RP*+G zjVt-LF#avII<{Pg*%v|C>H2p!Hh8yoZJejp${l-bo#t`EUXcOwmaJZ**UaBrUALy_ zJrUkxd((R*U5n~_)Srh(*Khu5xRH*jLHdc`QM0B5-(YL4ieERrQ}cCBdT)IB9hfWq zGBum7eb?566${2?ydIkZ3kkLM1@h)~YCe9Q`i3C<=aFzB0WtVx(jJ<7-o9kp&2;La z?Gs6D%vXjp33{eOFPR3ZJhnPYQebNQFdo__ZnAG$!pa5()DGprn1*I zC|l1fxkPQG<2_$rXRm{=8|!v5|4rqxIRBU0^N;UT=Ka!|d9Uxow@1-czM`yy?Hs$W z3+o&@)v!8+HK+qg{DfLxID3@Km-MkOt$Mejk9}EPJ@xD6xrXb8+mo)qpNgLuH4-n| z4z1p2y@|CdLgW%YW|`}4X`l75W3wIsrrLf-`vr^eMeOY|53?4Jz$!cn<0NWf`Si0%?GAcU4B-nsEvA z!6V^)hswr@>CiaoMR_oNeF8A5F6^hDo`602S-DM=p_)whvgnuLtgOqi4w2T+rvVbR z5nTGh5b6FF}vneMj>--O*I)b=DPVP}jP0UA49<`Py9{E@^Y2B`Kk#2Q#V; zd-t|uy8dL@($@8tYWs&};#g*v-%zFN zU+C8RxpHtXI+yq}7W08@P9T^u#?*_V^(W^Q-lRgen$*FAtm8y z(a2uHcSf<7ux=E41{aNze%UDL7mSjA{wV2}j*@<%TI*jC_Yhk79MZ3i2sT_T>hF?; zOyu8kTbUuD9=={V3LUXlE!oT!9CuDu`eF`u;hB=G^jejBur*jmJU~0w6dre@Ri+{R z>I~ORtFL<_)vY*ejNMG|HM^kck%43Sn_jJ=SNGm=aBPK)~co1DESKXk#%+cZ@(J5 z7?-LA^D?rFaXHz=xJvDfU#<3;fcKez&zau?h@rCrV95p8seR@uwHI*X!ld)nLh=H& z(0ZX-n0%4in_8uh@n zauu)X;dnOgvb`YH@|(w2pQ&HjXKE5V@(}b8IBu z(5CrKupeGduu=0iCs@rr0r$gq3-lo%Tk)Hr?gaH0ai%mY`4QZm@_};sTDuOt!p$nT z?a-+0+n_EL>bliYm%5X>ZY|eU>)+PW?@-b5#gKlHx6!;;m$_g!%3Qb`WzP3j^v^4N z6V89Q1^u6@16@YMYztM%cym9Fr8>@`I!xgf5zn_~e2?9rmh8Ka-uA`biZ8)hJA1qg z>MIq^7NV69stlQDd(9fU)*v4||CEplXkoXarfbAxidb&PyoTPXyx}X z687pmFP>Ot8f(*X-WecYc2tYB$QP+Kn>ncB9OH_BY@b^6AYoc=}9Ub21TarlMppu62WiHFe1njp;U zL9eS=&p0WYOeB|h7P|g6_86Be6w~)-(lYw7yHmyYtVMUIiI$T*gZh;jlpQ}t5e4)N zn-)`ERT;1BkDf`VtvAh}>dL#Zpbk{@X|o(<$dVvC7U4 z%2AFX`Kd`HKhXrO7`;UB6_e?ZlA$PZx+uZz^?@iXsXwG&p? zfc~8b_Zj)HifJLD6@;=5*11^r&3n~xLVj}5{FlgW(qv?Sos+mth5vy%CL-rUe2Imn z5NppM-(gEar<<$S;F;GSW%Sl$bH*(uUg{7^ouUC%o2xLZ7=ila^%nUYSG$$ zuWG$DqUQf}znXu0SnYY|N2(&Ma8CfbKNW6a4~o{Gp~PSAQ?2)))ca8C11R+&lu}kG z&qQEfZMzTPz^M@(LO;eE0t$^l=yVD_1fkO))U)kDlvsdJe%k}c8>Aaju2bNu@`rS3 zg!t9A9))F&s3qO!fjO%qnF#7E3w7^E&Uexysv#1;TO7!*jwD+6`WLEbiid4IriWpy z&Wf-aKDG)otT_D;x|IQCwQ_}WyYP_k^a|y?NXh4nQgz44ZQVtn?NzLxKcKd-dw^0{ z89}}8AFI8_y=rgxKD9S8qV`39q!wcLtA#PcYP~=CqJD9tVi%`{-R&MH91%j#!aChS z)cViqH6Bv=H!1v^VARcqJe!eG?4UfNHuB5UXFOO_@3MyV7K8_E+2#sfaTmXSboX_sx@_lET^C*6w6gTzM%T*<+A<<&g_+NX7_vfz2eQ~ zdqpSRQB}5Q0ni=0TXtbx+0py3sICvAmp%2rD0|v}QFgIi_LklFwk7tr?M~UHb!A8I z!%200sK*)Yvij-X3O-b=<5ez`E_xgJNvtlj%-hIUVpW;00dL7)Via<`4m|+n=N=)# za)6V>jYP`{9>lOL3Eq=d3c@DgZQ<`8MQ0vQhd{T#{ zvP0b>`nQRk2D|hax4`wkKI6728h`&;-inXL#yE4mpS@cnf}@6$z4d$BQ`N>P-dZ^? zs>i$y=BF}igWh_4l9#);s@#xW&N@%;G;ud?%VI6h6o%V!EvXV~gsNPEH6qH8$XIR^&NCi); z?#HA5rR~#4q4uBJwoiGu+V<(A4%??cRZC^8I6Om-*V#U;r#l|2va^Zylof}~0JOK_ zv-MpU0JQzSXkGbp)w=2lwdd+zs`+c4R`b_Bqbj0u2jT!Cv#$6Rw7CY(M6_V#BMVj+ zLd?42IkeOUAw%qiuyw_gBx7no4)&m{8Red=D=|EsEN#sz(&*=DT8g?jW~ zlfNxKHYMwh6p3^jNg$hur%u#_>F2vo#>--;1}@b&(-{yPpN}l&qmUgj}-=ftM(24hI*A>{#&%= z(%eNg7)i8w%ELwdRkU<1qb;mb3a)k@;;RR3Uk$LH<^QYZ85fZew0Ic`-xlSV^*n)s?`Ot)XA2 zX#dP~^e89<#oe{FiF>qUYqQ?oU zv|7kLquTyF6~yIG<0*gfRmN72N9^}}>e(1@b4bQ^Vr_|ml&#Nu&lO<~^%xVty zV&^l^_CTSvdBv*UDUXp>UWeRBKVv|Dtqz}l&8XnhjbT%buWtQGH6wDJmrZo)*t-s% zquU$$)hPJ(^P{9cSBHmlS`+8q3OB~Re^+PIi11XQPk@y!{KB?u1U2X<*m^zn^*=_I z;cD-q0``8d;Kh&GmL(hMEB&uJdflDPW{o}XsoZXx`D=jUxb`nYYxO3={_*szhWk&b zHe_JECc=G$`6YO7*l7Su;?I(;NtBd(&X$yW&VirTp9e2My?2M5{Jd%&&kLi-Ui`k! zKZ-*BNf(8=b-R#UD^thwuiQoccXyG$co+F6R^`{v#qUvDC{oMIujK6r*WRZfUw&D7 zc{ncNT&R4^Q0|Uwe~@=BypJ;)``&(mY)XyJ2YjI{`_tGr_X{PNG;#F$*YD!}4dIG! z@){eN>ECnt3wWXiJ=TM#9`PJtMYIT9l0{(4^pjDFMMPPJI2$L9w?jp9c~&4955Zx( z+li|UnBPFVZ{iDTuk?GhksB_o@z*tYiKL9P`9k>YpvWiks&me?|-#y7tZMmDkp`Z&8tYW0evW;m&KyK zisYoo4xU7u%5X^+$tlCT%sjkRFZ)obmPzQ*x2Pz0xXe7FHO?CC*V?*fH>|6L`u>ud z6;UVUWfg7LTKXnC{)$TYmcF^1kG#)i=GW~uEB1k$-_3EAl}Ya5@kF`wy?Nos#&9^# z9x{e)xruro;&L=@(_NLBIiBV-)0&Z6*pM_}J_IKYdb1SSLblmcOf#vQ^s2Uaisls< zmV1*gsr~Y6j`${szwJS9uNxr6Cl`{h16@9V{xXz%)$!hD#NA+? zdJ-?IhKx7FR${Y?9!ZQy%4a2Bf-u@I+{CRK{vGh(=!}~4u$%mF9?}X_h53@2Bm3(w zA%|IJB~3Mo2cjZrTHb;_4$Mt<$xSsSH`SHgY?s_zQ*v`n$=Y+Wnff)eRiG8Xu>kDH zcVtFufTwIKr);)UHrpw+@>3D2?=YyZpZyZ>JYSS^$X`?Y*{>b(tpF?i#Np@vo`v6; z?ju`W%$oPA8uoaA$}w2Z?W3K8-nuiZOIC7n?szFx%&gf1!l5WoRUTY#ZqmBs>kaay z4U$L7Cm%9Ky7MjYH&s0T{^W`)d*;I`S74RTgYR*N=vmamQSOu5uI>1ZvU^}pb`~>y zd$Q%snh)cn%z@`?Dz=XN%}&LnbnAFb`&JUQ)~y1D*C)Nq=e1^IcpXvLRvyErqb~)q znBOR`^``c;=5K{M;|!mbI>*{|ZgteT)luhGN1a>M)XP}9ID4b4AjUQ46~G7q$C|&1 zf8qR1REwL&XFWc>__mv5yie!;&*xEZM8TKyq2^u_d_TW`sqDYybe_JZ!t|{|olf+j z&UG{+ET4W|Jpf3!KszX~hrFosVY z0sJcTvzalcA?)nR$eq;gfa!{ITd7_i^mJ%C&xX%~x$I1lll7fU>;_NWs(IbVoDrX41s-53MHOY#7@L!c7Lsowk`$oo=>D zG}acfy&4tVaE?a-2Pv9~s9vZ0I*HEmzSay{hb{9~toTcu7KCRpeTUozp-pzmrgF+= zJ7u$-(#Y;_ukZj)K(W6EwO4$jinmvFH!8dVWBR9%K=;8WBWk*i)8JciOW9;5HIV*CQkOyv?q0XqGS%Cl52wUAZD5R|JMw|r$iD0{ z^B3b$_bDhe%6rO@w{!j)mDe91FEpTkc-|9LdDXb$pGKiQ-zw|k)#63%(Te|dr#wYJ zyImgW>WHGhb-XcmIczizbUidaV=ZL=@EF42ob_h+Y{Zhj^q@C;#BLCWn!)(DNp=r}0dsa7s5Z#MeDsX86yhyxl5A`5sWYl7t_GnBDg6!Ht-Q@KC*eE<7) z?q3|a@7uZfjbu`d#cAi-a-zEMt+V@30(qVvq*#Dw_cPn2b3XjA3ao6Fw2JOcu#|t(D3D^+i zv^cXv%i^^%=VaGJzi<+#+f2Z9kRz~R5_(FQL|Pw3{m~4kve!~7ctef6e!-|LHv<`-0#HTdo(=zAnYsXhY9PJ>s%82RZx7}`}r2Mwq z42u2rHjMrCc4II-C93-X>)i0Rs;n2*2#bWLggckJb5Zh%i3ZMq|AWEtPSsC9ouW_(1h*QP4B2V4QP}N?_dc>e$EGT&cE3&Jecx~ zJYkQ9f8+__CF}Y()tnzz-xY7FfAskTWrJ{{@U(CjzRUTaszdJN5P=b{>4#P!yDO_l z1&jxXLVBMtM9A~!Z`rO+gSYbcZdX$-Oob8w9A_Vm{E_$+hfVAkhBk#8g1jYkG#radCr{n<_xr@(%n>^yQ%K4LSGxAGrH-=9dS!3M= zU*(1!0?(rU58PAk>|GunFTW3C?ao3PjJ11z)^pbf5T8VnU1!0%u1^`1Uo4P7=kprJxRpEQKBp<e-Mw4)EhrXu)J2LM~r` z1p;_)@M|{N|KHZLaFlu)`Fq`7$4lotn0IXI8b;kL!0`1NkRrk^(%uSeoF~=zOhDWzLv~!S-ag|4RjadwvCMpKyxy?h zze2qOLaAP-zN=;YmF#_dsq#>t`Hwn1vz?WzZ|iSWJ}#^9^Yq_f^-D@$z=y^9IT$d%wEddZmj8mv*W=hvz&_ewuMK5jyAGDfm$ZDa6q3!ZeI&%lo8^4~zgjpRF|d$~w{R8y`Z)1r+2*Lj zKEe{XkLU@h(@Pw78TU+=eP>sVOBeOkQK5W~Q)}noo6$x#8Qk`_447v|%?5g~JupDQ z8Xx5cSNN7vvjpRy=Uf`gcYLDer$5ayQGjH#o@NDzbK9Fax61NUK7-t6Sth1H?z52l z8RX_XnDeQcKl~Y%xd?Nfft*hg-Y#7cGs~Cq^(lQWylY={t)!1T28d~TfVm&-+SF|l)2t6<09^LMQ^)D zkhPo;W5gLT2GZY-ni6V>yV-z#2SAOKJfPnm<+d#Up$3JL-}9aMLPwnT4M7rf0-O*6 z&i$Au*F8sE6ITDFpv>=D%8&HWuQZ-1k^zuGa`IDy~5 zN)EXM+{cEA_LKXCOJzem3c#rmiiia!2uDF>C$oR4+9-7J*)|>Qgn9D`=6wY)&kzgZ zS89vMeSC_nS5!1-%u^NfR>gc(F@IGoP!&@l_7i|COOWd${uA1J6k;b+OozP3Aa*Ln zK350KZvlL25uOFQ^DaM}>cZbut;Xg(hdUbpi9`(IE21A33jcyr;dqH#=)zkIUGRy8 z8UI$%a_$xAUqb2yg42SZL&nDZd9)q++SPHX_G}>wCn=WWAY#Bh? zw_0bj-majg)yW$=<}ZEm1a7xYs^Nd}GKQHEqs*9{5d$pDPG=}ZkqTiCpMZHv1uO&C zz||8(lqaL`RTJvr#>N;&PQ2MA53NuEm7o#bVb3Q7OK&a-XZ! zEi=cUd>`xrMm!qaHG}$AKjzl@QCg-qP2#okcYP$$ z>)cE0qi7|wsBgrl8)#wTk6yq6UZj@2$#EqBoGPK{F zXCJG>66R;{M5TO#@(0cSWCovb605MrHqT^2#q&u{j?EKLM+I7*{fNv@KbjM)D(c2&yMxHENY!@ z4NkrQvo?9P{GrdX;dur4i?Ni?+7zftgV?O6*zlwR{Iy>Bk7{l4YQ|V&oUw;7UU?ZY z2RE}`R5dJ#CqMcn?i6)L+EhrhUW7L(wjlb?>7Ty)U#Ibi#3D}7-k!}oO z>^EWj#u)C#{3IBAD?bUw-olZcjw4U`*W3A@VSWpYd=m4~b``JhhL}iHZGSRBzRWkm z%=;uEm-qAB>7MbR*ij>M;P%5y!yuA8Mxtqs`pTvNx5@J+R(gXp_sD1#P&- zGJO6~5``hN80}!4f}eHbX{BKLkUjvb0?sH3FN5%A7ryUh{B0M(BDqFZCrEH>5>Rdh z<15wDp(LFsP=|SXv|i49oC6kCMg=(|_(Z(9AyN@8tpSg_&S453W4}SACTwrd<$SX@V}!hlhS7h zT4UMtMrk|i%O$(f-*t8wvBqa1;^6;{K4d*Df5F6B+MmmwT{ux^J)w}+Cxo;{yaCLw z<_#!R-}z7aQ52J1NTA5T%JA6W88iy6WI6j&Us|i}D=3bQZH=cy`@S)A$_?6Ay5UcEiqn9Yt zd{RV?8kTPsp9F0E*Rao0Zj29@zkzUG9HSis&?*dPO98^DEAe_%DC-1OcqV?kU1Qro z`uV6XkaZ?uj890ez8y}ysR@9! zb~79oiSEsA5K(RsD3P`angzcW@fVQtTfDP2PY=hT#7z?3kzt9rW~Jj=>5dG;R$GgP z_tf}=5fgqc4(QKB(Z5R{mB2coRA!=vcW1hY?-b3i#nY4*+G*eaf5xMlw_|F-n)N|< zapnZgAa7b}0WJ49&zXI>zf~9cP8M7{ispOK2uV)87qtk^ypPzU)X||bGyF3VH5i(O zpNT{I(}b}-qND#2a}wmhsnINA&QnMOxE`4utbq$YvR&n2W(d|{&7Nwc-(9WW8rS#@ z7VZ#!2R@pO#rpE6{g>qj{>$=%b>)2yUdR%gzsCLlJt^W%iwEzyHsGxc$~xhVz-oA! zg>_=i>t;%!*}D#98ofryfE2`zPBl;x3jL*X4=6@rnvx*@>FraS*%gZ7F5Si)hS+|3 zIC-WAad?#Px>8o$4=v3pGDDrUoY%!V+L2!(bR+fLqlC0h#RYY7JBxinL@P*!c7@w5 zp$00}i5jg~=VDK_FJ^8Vuvx3U@2~i1uIFXE*g)1XNicft#EfjnMN}d z#l}0Ll4OJF52EwkKKICsygW&}QWoXBGD+L0h>GFql-;bDcE?PQ#`4}t+JlD;e{;F; zKEAIA#~QNXGXjQc1jDf0VqwNQmS4tjS9Y<0AL%wftQQer8{QpfbFin!h-^tY6eQRP`VNDo*hSs+R zR>7Jk_>I-jYpC)-v$#&gbtqQJ!1k?)YCUU0S}8@?KG^e8^!kN9qTkSaP|sx%EvLfT z({-WeVkqeW{B-=ten?sRY4v-u>zL1HG-cNW*tMcZ7Mmoty5&|eEV{xXOGy|P)ff|l zO|*hVDau5^xDC&q?93hXEie*BOD^DM*?mh~Aw!Ne32d5vBb%mO&mu15AR8{j6Y*mx z254!=nQ0o+*(?xSF04$(;OP-#3{OXKyv%x%5skQ)v3%0dIv(<}e2byoKCa0n>}@oq z{20qV;9<8bkDK~uFB46eqqxGvW*_aVBzdJP% zC9rztMS-dfG9#8P!kjCu+VC~F0t{dAgx8bH*TI;?@U7t!3-GsZUQFAfX*)YTcj|GRvr>_W6vdb&J!j{hWDcB$~Vi+@{?lE%qWbt zi#?mix!a<|cNmdt-LkU!lv{jZUn~Ic%f0|g>*3o2JAK=b_l3PSP4=)WG|ju_PtPaU z9*$nWMgMqMH*xgtnCxLj^jfz|UcLAhSJ*}ME3N>-K_hBRPR+3Qn#+dV?q>IsqS*uR z*)@h0P6}&Av~O`tLkhoVF|_USu$31YlOH^@u((NswkAU@d!(9;$vul<#k&HIcUG=@ z@SMUaW3|*rMl=UdU@OdX;glwAi%;B3z2bO3Kx*o>1Q5O}H-0bHkw`In z46FLrvouDKTvPzB3+0yr3|ACyeo0sxUTU8VZp<3OQ7NpT!KQ3`NTT%<6bupEj6?D%QroKxar zL*CcVC*mpkmCgGac6) zKRG?4u|G;4VWe{!;3ZcoKCdC6?uJ2njAx+b9`_;4?!C+IJ&a^W__Wdrb=&eEO0$A= z3dyj0GXE22J!kW?Ahk#S?6KO&h1e%9vrTgB-mN~bxWOm-HUwOr;qMm<_a~n@A-@8? z^rYd#M=m7)O~19r($x`e|F7DET1IVeeYw4Pzsj!|OYIHY?QxqR6->e+AD#&fF*%gj zNBD@lG&{Y7-}cQ(Xg%=D=rSwJO=^h!q0Abl<%AHk=1kDgigJEV63Td4VRllpW>3)2 zRxA1xdLKECc4-fr2CIG`{bqErl4?TVOB@ZLJmVSET zVx^J371Agt#~a&K8Lu^_{mXQ!S%{mgvEL|DtCio~gKTU!YngNtD*jEy|)N4-EYI){dRu?EOfzww4!Jf)L@(ZWq9h)IU#7*U!waGR2JyF6p zZ)}ZA3n6bXeYu%IkJ%E+h-SzptQKoSZi^|7qG!1$z^Y5)qw87jNwl!n!E3yO=(jy$ zi%Hkq5cg(RBNgqw%RQjKnQ^np?wsNwe=rK{p-gNaX3a}ME2$Xrr&0P5pZ!Xfw69mB z0t$MF8N>SBNd@IYm(nS)QnrrgZ+QT#>u2*6^vi%@lt;XXg_NA)E49M z#g?~3f5PY6JzB+jj^7*hWq@_MVV%$02Vf*xgnACX3@t)Emz)fJW`bDuFY0Y5_q;dJ zAU?-^4%(Q`uir~U|GqoEUD&XfW{@SYkS&81BKX%71G-8!T*^E{>6jj2#jf$OvGW2% z?X*fI7=h4kEy7gtLtKDbgG%EyaY39l@LfPY+RRFRPke7UtKjsD^L2z0Ge{GoBx^pt zmsYZU)f3-Wv(trOjh-Fp!MR(0IqDRv?|IGr zpm%Lrmb^YfIE&xh6eAz1`ZS=`Ftsn;p;2ypKP?}c0^gDZ(l5wbBt9n+n=Cc*H-L4w z+k8eIE@_B6=X!p*Ec8Rn0lu{#^r1B-Qpjq-9!2PGh?lC&3YC6U@dSiwu6SCUkeznO-1L)02dx52k!yO5J-{9AFxoa?W84;jQmZpQx7Xl69- zn}LT>o8~k>@_wE7Kqpn%(0fM2wT`z-dkgb$tqZ&@flU@HVLvS*lExJD1n8h{Ou_Mi z^A18ip$^!II-4dYSqobt*>4L2=KB+2uRspwT5)LE{CuKLWsBxN zCz=#O4(AtksuiCKIiFR<{%*%Y4bH#HDya4E6{9hq94q;0(E&9sFJ~viYyG<`P_X z`YybYd>1<5&*jt#^6IQPSo5(^vo*U7N_4l{UMh{wGN;d)i|@^dW^g?g9{$8;g(ruQJ6 zu=^b(2$-LH0G%0hlWMw}(LTyY6WvfI!)Y~m;{HI4QfPM5h@`Mpv0s``7(#~D+{>-y z67ClED>h*E%V>Y-^;Xm`XmQ`|9>-Ra-9E%us^^{S!Nw-x{&bEg&Jl;pI@!mVrd8_+ z?_)iIiW$B$z_vNjP?JQv4hStWmSEgu3ikW|=+6Aa!}|T(AdS2|xsb98x|Dl} zYw~;K-5N0Z$g_o~595IE`IievVqXHwg~RZv4!@prhlw8&bJ=ttq!snmq$P|p4S=n? zNs~ZnqH<$ggZebUlYJ_dho?632mS_xgZReZ@eRpP4Zv#StP`bAf+?WleF4NGKc`YX z$>SKxGYlu2f>@6SV#EK&T0Epd+@GAs+YOHV3JAcioYKrjUdJ8&9<(@3liA37!yjTj zU&EeYze@d4%e_&s9^~BTJmc6jUlSYo_wfC8+cLE++ilCkN84@7_|Bp54$PL)(LSa$ zLmr$V$oFNg^AV53rs9FAiuFBgu$r)T(r;logJV~iWYeNcbJk2*-x&>|Nz)01ViU>0G`(q!nfO8QBLku}j)f64SZM*m={fKEHl2A?wOr%0{6&pa=3#aM7Kt|H6>otfwb2SjrnZd8XQfX`#~Pr zpT=q&c?2TM7b5yf%giuK($%7pYW93h%CGrYH$KbGh_L)6AL_Q12(hr{L)~y0igKGE z3(qWf9|cgX0Qp35yjaWgdID)-cZlJb!@5>Bh{)4AB1Zfzk0^}{m1AB}S}x4Ou!uVm zp1$S6Ov-yhmIfj&g{@*&`6X9a(pjcG#=_EUcq$C{N(lAMV|GYdFG;Ztk`&p%Br)YL zrEXxc$cVWW27NfaT0*~Ba_K9 zn=2*TTq%?kOycdcvVU_B#_f|2^aIh;+yiF`oBbh@6&mtq;Qcp5Q8B`qOn@14GjKBH zKl!UZJd_G<5Iu6ryFv8I$p0H2%6|&!nf#}J(?>Ez^I+%)_p3hq^ZchD>FaeSAsBHK3UDrf_Xn3!Zx~bNdmXFraAu(=G$i(29^-!4(2~S-smLXmpjgo+V)q{jhram@44NA^4l>1eit}WB=Y8A=iwTI}( zTHBlB%X|;xqk`V0q3_P=+Cuh#7ww5;2p@RRYv{%Fr4q`~^@R`7P_7m+b0^>He%hlY zPSzosAtEm;Kc`EZs`~*;p98oBo|Lf5&4sZ^tT4MvE2W~mlEF$GGtMoe-L$H_n?fl` z=r@FA>HAt;O3&;=G_;{*zt2$TuBgwWFuc9v;V$?qWV;H2 z+0YN4`vCWmG_s4yPTNYGCvgg_xf7^&HWXEc2lL8f2LAmC{2h+ltt&Yt$%dz3ZHuY4 zJxaB~O23#+ji|C}dQtBs9MXAvc@LnTYn9;@!wUo>1#K6wKKFW2a3i$CaHbV?oBE-j zwP*ZTqDv0}Ix`0J=pkAU{5nOI)|5cL;n7l!A>wzV#>v-W^>)$HMC&hre7dWfosz;p*8mXGy~S#xv|mhYhnI5j{I7AoEZ(}afokdbZhj!`R$l#)BUCVF?QW~ zHdC95l6epwG?zg+%Yf9DS=!WuLg7JkFvj&+6^9fe+1@f|03~{uR-89QPFoaL*`Kv^ig<^J^E2v zW7_~nYQde>dH4jq0q?51%)z@+=CE>^dOKe5jqItN^tDqe6~ znHPMx#w9DGtX)TGs19jBHzqK4GW0(c=6NC8igi2W>5!NDq=ij|@FWa>fL}VKA2Old zMs`WY;q=&Ob_;&vALuH^@O%hBPDy6^4YFI1ZN2u<7REI$V7;z7RCC4-gV?WOhcAk) zg4odjwcqgf3$OW$a|G%8!vSBv|4o02iLz) zI2?9?DD8o=1nJ9w&P2F(8$68z6OSDLc-^0*5oW|^`uzgHFFmpFicPq`v4+eLkok2lWK}spkMY_oLj=<U?PN!nPE5i(qas_CF+$wEUh%Q^?5Tj=RDQQq&7;crMnTGrT0PSu zaOjHqX>+wk`?zRsjB%cFWi@c!!MR$oXNqig59-_eoOgp9q&s3l-F=}-{HV$6?v*s7=(aPT!V8A-UlHd{+c)@#RUIp2XS|HB)MoPR1kvn!EL{fh+Z z-LCyXDnx0gsx0rn%2@MQJ^+7zQ%paVcr@Vir9Luz(|mg{YwKJs{}{mN*Wvjaz;u2+ z@+iU*w9!%GW*{uN37*1x#zesT-!ruAh0}RoHqXJnY|d*rSB~X-u`liPEcFGoan|-g zUwTV@*+_laX!qsefX@YeaZPhI*?oD|?#olymxr-0LE^~x%bb~;;fZkVz98zxsJ2D7 ztKh3UwS!r9%|X0xe>fKV_J?D%oR($zZO}Jie|lyIdEf9G*ZvjyhG`2_nv*r5JcGXs z`!*5sp>NtWEx@c7<`V8>{eCXT2=x)I<86i6W8*`qCiEW6`_<^a-fFmh2h3w8H|BdB zJDKasSM~*^cO5qw&nK@#9+K=hrdLm10Vn+r@h%!Dgacuvb)rohVVcmvwg|$GqM1wR z#If0zp{&pSP|}DO%^$^(TKfUMCm7;FX^Af)PX}Bq;+n}Mq1Yox@ox0%v&@GlEw``f zW@}oC>EW1L#1mJrTW=%_FlgSZp*-|5^U}$BLmB)Ydl&TpES)>igp+nUS@8^t^<&l6 z+IXxottDNA>M`$W$cwe~d3Kxg%5C00YMVEV(&mk$v^h^}sBaOf_mlNdypayZ(=o=h z2L8S0YmNPWAFtK=ui*TSyPI?ot-Q_G451(#U!#jbWz6q4>1`_~#dBsPkau`vGfvJb}_?)5HjrdmhV)2cU(KxsYf6Pa=WbdU$^l zX{Mz@Xm_AvVTe`IvS*NIEqUr0K=X8yU$T#e(^Ie|34NVazNwvT{P8xKZJEjtrU)?x zbUxdTcjn#L>Z8`FnAX$I~8d`)Zrk{;vWaNZeX1`{9TulEYkrsS}MaP{7 ze)|gBUmMC(b__)+trg{+=Vs4$lN>ILiF@k#E(!~CXT`V_=sLoC>`>gKihC zK@6YSjNH1ZKeQ#JKQSbwJ@e>6Fn-#YyHR4(^p2TNyrVShcxFF*K@o! zJpWABEG+3losp0%x{&|nAA@#Jjj`FQ;G4-tNRRI{EpulnX8bef^0DPY7~b@`My@jc zW&AtkDaD0eC^0^-o}y)M#8N>_RZ(Kxm;i6916^;#^t?|~jx_#Z1j8Z5!p4prnTOwH zc8(WEb~c;>**5gmu@z?KdgPc!a*-Iz{3XIr19(sNzYOiCieo&?)8u1f%+Ev*V4pxM z@5%0CHm}*+?1eABV!noD^H8OQJ3h|CJpr;%B5r3uEK{oYYFmG>V|23IST?6B=2aJP1`-I6- zuXf54%5@q|hOgN5&zQc>r|0x2wK4Tlc=I>eOLb~(>H`up#%1sGv(!`dJz*>tPM3P@ z%lXEz{Kom3-6zTJqd1Zf4iQ5h23=qtUlS7!S0btL`D+`MRK|(0)IE2-h4i>NDE3uecV`?_{<$T_r+IA8PRb~A@m$3+vF~SA{GA*MLjl_+c5Vt z%Q#8PhZg}9{dH^x`KKzHFE^oXw()5;GmecDO{GQR_JAZdj%_E)KN4Bk?c+abd=xdb0WSsg7<2FFNr zHy&nI`a~_?wn!V9J`*j}v_UKbu^A)znX({`bOouz@T{2tC@?e=8XuVzbTz^Y77U#+L8Wm#<^?MasHJ(&Q^G-hBnQAl0a@p2IbwP(%5Ik`jLNYw@3b0_Q>yi+!vO| z-P!Mhs`~Ave&d-rgYiBu`M>M4!TXH0C#ZIh1NYmH_?|hJ%Hngjh;AVp_dsYwm?^k~ z%pjcHF1L{AL9XagkaDGnx?zSir9Z-k2d4p^ut9bU9n0~A7ln}pDN#rccOM0`2l+Yu zFywO5!u#Xc^h_BO@5WPnp@z3gi!|r?zN9L)6k;!m1Nu*57(2EJb#lDGg8E7rLbd%+ZpSh_#?9|$g-LY!#;W9`UxM&cc-tmfCt{6H zV%UW^QM=1J5o`WASvH^)k?vt%ujR?7s2z1o>0S>tW@8j9>M!8i!iZkfe`kkMKvDko z|MB)F@Nw1E;`sM&b7x8Jy>lnY%!IbNlcgPyWiperlh(qtY0Ku4-rQ*!5~a`<1avxS z(*+9B1qh2uTR;&|;eiOayyPk1E=noldy2|dKopf76$&W&RQfyTeDBQMnIr|DpZ`Cf z&*XmheL3fR&(gwUe^H5jh+N47B`X{iT^;(&%O_&3<-C3HO)xvLT1y*#*lDY^4mRW; zf>4BqtLybNfu~F6D=!+pyC|AMspUe(GuZ_?j@=!jH^ZCmsB#QKu!bX-RR@F6>l6uC(csH z4ed&>iPRE+UMuBOij_3>4be5q)O;o%(YTI;>e|CMv2}R|)*kLoiM8IWzhcUYHjXMqHN-(1;`ziD_V(Y z6wU^+#Lzc>t8>m;?fp_vLD>&%d-Ab%c3X{Ry8ltDwqCly|4ml)-wghHUB7(>oQV*I z_F;ZlPQ&%q2_@^dWNWGqW^(w-QJ5Vw=x5cD6b6N1;m@0VFSg(+hCO)i2bgolT5TEN zz|My4TA!q`tPa?UB}Qi>c4e4SF(pN3OUaNaWp(5Me;x1*)N=Vo%WT-AXT$j{M*%j^ z{iS7gpR*d_-Ysp2N6m}Cp6PaXw$vs)EH=yAj&s&xiu2pLNE+>SQIze>DcX+AgXyCr zF}M)l&yS!p?d#dbS%76e+j5)6TN}ywQ6V4JrkjD+@bUv#iDA|Qo>B7upvL*+>u#?k{3(3f+@DQdF zoz-qCNs`CYe9q2qLr8YKLueG*grh~km2owzBf>9*-wSVwior&GZ?@oR|09$bU< zjr+)r{P4q9Zq)MIHlcIk$Hip5sKNu7Q)P8gTxk?Ua7anw0ttB~xp&q3BGRR|Gg$OgL8}aIU0n3CwnI9HIG z9I*vBSK$AL=s%3B%+HmW92D$}VI3)EOJ+@++45=HNdC!|oBM-7XFJ}3=MgodXfy-% z7?f-VC&`K@Te{))O19ea5Kq0hK6MkO7HxJKrAE#uK^1Ni&d0Oox?t^lO4RL-Nd0+T z%qnmz4E(Jn(H~TjN^wAmq6@VVA1dws1ep_Z(hGF*

RL0S+#X}?efzLkyTs zowm^5N#6;70sfk<{N?3<+iZ)@bFoI>93^ zT!qRx)k~xkwh6+&M(+7!rIOsD3+G9_>8c&BdOM8mjE_EJt-?_fj=lkq^E!fN3<%pJ zl*3AuurIh_`NRl>okw9`s)Vg~!y>|kFpnb{gXXa;|4=Wl%z2QCMl4!=<6~Z1mVhU% z)0!FERxnCL0UgnXjrAJGW2$3*Ey40dl$a(8<9vo%BW6S$pT-Ky)@k`=BN|$VTEd)V zMWQ{Dm3bfKu}0bk5ZC5Dh{F;lRuyt3ZK3ZRUM|2Yn8sdQ(k4Wn&ZTAc7m3a|h!i`r zZG@EP@qr0(f%raVFD+?XEe!RMzKa6*lR0XGOPh2S^Rh(J9Pbkg%b-^A7`NOlSgtfa zmweDNoX-i#(`sd6&{@jk%C?odvGvNt+677jv!S%Dc?`8N?FuZt9#?FlH}w%$E~+{L zNtOF}KXLqPdBJ8?@|ipzw1`VTRp((`ESS(^KaW3`;*)O`BDkZb(|hGz13|*=3dRPQ z^-=h3gx@BuR&I=V(yZf1#lsa*XP*>-6Y$x zU0ZK_w}-iSaFRJTgjjd=n6%qu$!S;gDwN81pM-MVNR4Z>9jFcV9nMdt2VwG#Xcr4} zZ1@S2aT(WYn~`?ol)QCvnJRz)r5@&t^18W25vY3!ubb<=cwJ0i+{Uneg}K!5DAtYh zZ*MwZn^hMb3yIG@t z8oP^O>}vHO)$8~XJUn;Y=Ft;k$(R#Gj=G(P*bm-$I;=A8MWaCxXSXi$5WFagwf(%6up5WxJ(fE7SlcKZe8m(j<19KbZYsNS# z%3CAT`#kDW`V_eHi!Rghi+5}HB!-1cHME#lG8RI3gWxRQMW-XT9=3~4ya++R1?u_c zXcLrF5H8k|vr5K$DUTZ}7GRVpKb(T3t(D5+=l(>ZAY7sW25)pn8LQ{_xKANjhIXob}#1rz`~mCm%m$ zWjbYj0K3MSnohPj4j)CpJLKNc2FCp(+`ooi_9T=6P`k(d$^RkQQc+EW1-}QD9-{Ss zR#YmlM%g6&>-d^|VRR5B))cla<4_3nOLG4=317bR&SRbQE`s63GQ~s~OPFG5<%!Y$ zgws8y6`C*9oZc~Q*xpQEGhAGri>}^i{yF2o9hKT0U9C3wl1eG{NpevrtQYJxgu-f* zNN>*#C_4ubJ@nm&EeXqEAAd_wJZER#!nx9@Ct~?6{Xo&_kBZ%R6Po21A^8_CKGEjR znZP0}CuC)XMPzAJQi{kq(v6C1#BRPy>q9-K&7ana1OKqP`WwWg>@OH)xeB}O_K{>zYaAuyOi5j(j;K3EeM{i%Xi&o{LL1dQ5jPKVxbBx> ze?vaBBW3;>bE#KjKBRnv{fFwqo=Ur}dB;9nQ%SqWOZ(?tn z22UE~0x@65bcTrORL|X{2pkVnT>0vQ%+BpWx}Alu+1T4C)v%~^VlhVMiGlY^^hq@oJ#$~olE=i$CwJEG;`msJc1+f{+a@y4;kmuM5s zg|z?$H}bd*HF4w3$=7wL>uN32dnMIbwAM!*fb_D;YQ}GjEp2xB#(`4@Va$1Hlw3Xx z=2~avTcw(21IH863&cj|trJ@@eENt6c^2)eaA5HKBb0w4u|R07=>z3ig?aLj6XozJ zFQi{iz1T&tK9&PLQF+|C6i0ow-20U{3vr(`5ogC{=pjI>i}z@~c7+!L?%YflSs{R$ z%Du}k-Oa}rzG!d7+ctaA)#b4bdHads(3&@OR)87`{a0%`@o`k?UgxvQ%};9sd7+BN ze7vy%-pvABQ%to+RUgv8g0!zmV|*$eRTW*#=KwW*gRWZWct_lv;i*~=3?J9GwDCBl;*WR@f zNp3Z>{6<`Rfts;F&DEZn-&oRgk?Rm(ULHK_8m$jy(=6yw;tDNe90GVhsBH&WRs2aq<94siqd z(+0lqEr^PBx=0&5cjE=56X!h5-hH7)G6V^O*}Kov76<``VfNMMq0V%0l~Q(eEP!$L z)gOm2XTvA8{53l?lxJQj@E58(2!dG-wYDK7F_@2zU7zn6)d+W7YG1QOvwJsa_NOl( ztZm#WKuEr4BgDgcA05-2CEKAqKdqi1l!e;#>}$@WToaHQTs`1gWM6ZkmhMFElnW^i zO9B_fF967yLa#l~4dw05hQ53--?Is7`qDxBy7RP&Z8}k?WzSh#oIB8}HF&T{6Y8 zeR?mhSv2DDik=%`SA~Mgt=QD+stRAD||hpMYshmSd@LmjKC zb@;H3RpmN-SjXBcHMK$N07 z3X&@$sd(}=dGGJ=gn`_n#pV4`Iqg~mR@^(Ac$CB%*+SDWg;K6Jnl?0&O_e?T(Iw-s z80y<8;F%{3Cob29699j}%{XjbiCjC@9!`z6u0~21+@9_1F~H2D0F4e=*MjeH@XaFM zCpFV5SfA2Ha*LwjiTU-Ax4(+9D2_&=!%mMPx%Jv_<4?K_9fGyhES)_o7Mm z6B>xW_eqf~_K8nYiACeOXjzw+RCBMdgEOcEx5)8PLDXt=RFh4!+-87@qVU}TU$pvU z=PuC90~zGVS%SCEInlJ7^l|q<6kn^nXShZD?59V&WxS*Dt*De+N2hpJlnB>73@J6{ z6!KOYI9TSt0=~5Lim0V1n3aN^@q3Bq< zQ{vG5Hl*E+0|Zcl(`(mp3{N|ipc8!A`5d{6Mjw8~3Cmf(i{9aP(2D^Rky1L3;&^%I zQ+eYSZ$l%qZwC0{PWXKtV1)U?ErKjGC)3{0@%h3RAvBVlQ#7(vo41Z}kpM+Ny1$pC z)t4j*O+uIOAIXNgvTlW#F2RJozkSp?NI~$Z?yf+db0P08?{^llE zUP1QQ3tXT|E@gvj_XHe3=pYJ$0ND3J!YELyr!&Z5WaKBAy8&eu&_Bw#P}ZXkcf=Hv zFO+i2qibQ`BfoyHIFs^s0gmpaAKhOJatY7d}B6Q;XJy zC~7bGNldJh4~kLyJ{U_>D2NLYKQcZ|?xJ;Nmk7SkxV}AI;uLmpklJ_}q{zeRl_6X3 z!?1VDr%SD_*kkEE<{H{{#Em<^v2L!xFhu@5yHs-q0fWw5tR*8z$x~Q<0QTMB9$2XX zdUxF~`3@!()WeIRbP9=P*krczDXllx$mUBS*1I~uaD?WG;}POncwMXE5k7)!WB>%- zUB#CtmKTKcGz`sm?}q!2Y&0CevJ1ji3NOg#YfcY*7hk}?OSjM$X^MrV7izWd`dt-x z6tAAL;*rvIyhkc zV?-g(@)w3!A-0uDDdV~rZ-?oghu1i^R%oAaQ-qV=`6sCRuLJlulWUo`9;)n6pe>z<$Q(qs!s0PAiRab`=pzQ>Y$Swsa)4V+|zLK zG)VXoNpx@p&&1PEPYaCaI-~`vsN=i$_<0Q9BsZ{zU|UcISp5XVMMK#Tm&RE@K66Iz zxn((wd?W0Rx6@C-9Q`Bn2f*7yyENxcMaLWO%WwmX-<}Lk3cG_WcmKqZ$F!mT?b9H+z09qgd8aV7d)ilU?>W6m~y%VQ6r=AFB>{3Tat z_Y4k8BN~R3a)Z(9g6JBS*VE~JJDzkq;e5($)8F{F>*(_iC-#2e|s$9tuP1^C?7qK9c1xg%#|B8~D;)6`mPqjQ4CM@snWgi51B( zrQq~Sg{S5;%89l1rB`doSCN)6zA7nBtadJe{^gNg>1X*%cGK4k!%0Z)e;ma4;&LZ? z-Kjae#awOpV7VTX0x|`5t zvn`b04#T~034HVCX$uv=$6fdMAl6>8J^&+tVTC~`0mrx((q9VSGvQWQTR`7Vx7=I! z9BlEFx2{qio>DPdV+CcZwj>L@#UCiQIP!7cKTLHqwKVb$Egs-4KD*rF0bY--)U+6V zlSiUbUW=#2$46rlwWWEgw%~c^r`PfX%WrpA>GG_gvyyXMG7BA=fA;9vN1HOCtWm+vSX@vBWc%fw2 znW*bjz#ZQmMgEBEqO4*+N$|+KI2J$ziRz2tZa{qqqJ!{)1S8b}&;{JZ=79=z__ac6 zD}@)jFW}#vE%ZfOQiYxiwW;NA#x&0TyerD>506!3(ra~bUFXroRW0KvYU_0X>#o(a zEJ^O7A+++-3{Ih0JoXG7YvHl)X~j}__*r_^4M&S|XX=`pW;|ZCb6DGs&raEn2({z0 zn#0c3xqJt z6%XxpwtIK>#zjh#XJ_l2|LuA{Ce9mCD~(hNI5o}dQO|j+h?cI)@wvC6mP^G*zE;~; zg>(geKQ6euM^YUhw`1G@XY4QHt`_+zbiP5n@ymEsul`i|{}H!Xa1xE3kMj+lah7WN zQ!#I9SKN}E2$m9T?Qm_eR>$qVZu=$De36EAe`1{L3_cw1)i^6_`c9yp_I8;=5Hf33 zenK*Q4!)Iv-|51BoE=x_rI5k_rjT8jqMywH*mFr7=l%w5B)2V&8sO^nLt-3`Rf^gI zH)R6-YAc=#r*)R&XSb$^?k3dOPc0gEy6=L$0`h~5pRb?JytXNHHhx~yr?Ia)RhV4IC)&ae9yHkWdN_VBmW;=ds&9Ob zXz`!drqUPwIoKmlN9*;4mub&lnjx*P)V^rF?wV@aTAdtJcIt_!B~4fFuc=<|TJ1#` zsYitof5?67Mk?Qf(Zw)}r=|jWgsCF#+hgJpn5+5axia2QCwMXUKr}5Ejg!HLx2wyQ zCs{qOi^z?KJkZ14`!qgF)7ed)x*tzbKPKxjfjDD-lubK+Vh!J;V||X!ohPDr+p~Wu z&r@!m>EeIo#!rS(zAKgCBd^X`$NB=a{ewMaT{iO(`%FNXb$k!!VSZLD8qWY6NZgkP zrq;t&%sm<9df2@8>bovK_q%AfQ!U^7CiAY#Nc}$AE&sb^JX=%7ba0;F*~4D@*6+M; zeoOmiI{VmDg?V);wTmByb^TbJOXtp*ZNlkuDBf%D`h_`4{UMrQWxh2pU$zs*U2*|w z>Mn>k!8q-5-8X~#3fKJ~;QkotsV)e&XyHSQkGI|2Mu!w*#DVw?y0A-XApmX=rTGSc)%j+y;2REk#K-^&FW=u+$eT`wQVu*j?!_((dANC@+ZXjTfUX^m%}%?(dlnpSyEP zyeUO*;E2P($)0M^kp~6v#8jh>ukJ(L4f;@bBdp{BS2I8>?D{)3ryJq8Ps9xhGYC56 z5^g~r4|fD=vF&Qblk;D(X+L>?hhm1v-*4p_+Z|rnH&@0j7a-V1_TXrAmWoAtuAFFp z_h*V4<7Y}e&h%v%{avx?aW05AX2w`WhrC!L8{yuXB(Lctu&htUx=B9tL2W|fy6J0l zdRkcC7pXi-Z?uuz%Y>o7i?VmSW&cDQm(c!n{d)NFlsdn8Kfdw~{rn2zvhT8=Sk_f; zTmE~Reqwnu+i-(}Kht2!WElWLhNb_6kk2+${o}5s zfbbOX5z2C)&cJ%zYqN+q10XMwWqFbp_3%pS z+ZyM44GZWl8c(`-X9Ju#-_j6c%5Ce za?KmF@T~}6noy1!@mh&E8Y9eczO6Y+4%3k)C{q~H&Q5Uk1W9FSx<^c3*jKN^5!)iy z*#U4YPanZuv_6mY0A3b^@Lr}|YFb!8KK=Uh+%dl8%0*)8b7tcHNRqw3S{cGwHGRkT zo+$Oci>#b*$l31sg1G?tWM@8aE|6s6r=^#kmuqnpTnBWIhB-fM)tX5afAJAy#{VwF zcAC&v315qKDIzk%Y)*GBVBoUSoeG?Wrkp&T(!5!;Zi_FbnMJOF8My02+}ZegKOwsN z5L{c^v7e5C=VG04^%O ziI?wC`CmI^`F)~7v;|#qB9JTfv3S3TI=8&{1i>)5Q({Ixhhah+LV*^Dn>ePW-8dUv$es^vRVNV@iYChswvYq`cgtkd-!EyAQ# z#neBoUX<|&qup$$>${p8B4wpA=TVl%>mJe_7J_oTvLa3i_M5mur>}IF4&!pMaIJdV zsL#O>CtgFQRE4c`9t>HnjRq|S=v1e`ydZ?e)O*=v4G;e#^YyJ!m; z+T-dltG?+qy89IAvQ7fNVc7r9U`*@|l3mWp`|;cEe#CXt*~)2|od4F_R?fG0M<<71 z5}tN{dYX2RzGJ(+d?6h~9~txT?sGgDZoC@ejQ{Hn<5VVdayjW|}&GF5s2!!tb+ z!O^ZyA9)g|Hd?SI({%IT&t{+Abs=fR6ScKm+O^*b&T(kyc&Ls zh7o6VG69o$fWN8fQ|KbES(nBOR1PoUozlMaFQk3(Ur77>v}sj0?TGPMXnOlG82@;v z`j$|K>k8i{&Zj83obZQrl(FDH``8KT}0dWBpoD>U0X=z7pMig)j)d z@uiKBE63qu$l2CU<+&~i^&6xq#LN5C2fv9mCRub?hWqmw&Xtb3s}ZDZ-K0Lv;eOZUQ!shDa~6pj~G2%|}JKJ2aJE14*q=PQz-j2eKnGRyS(7`~jt z7|WJ~mbL#y!H67IZJ~@?q{ginBA!w*V4Ij4$PG|RP?j0f7 z0$TM!t2E=Tt>ynqS?;|eJV0gbJw#bjo$hR;$&fBV>$9;0anRP>QQH{m|+5zRPs?zsq#{m@Z7W_aCh}8*0Y*HGPV+ z#{(xDADLNy_SBxCcTJ;1{qAYP@1gJp&)(jG?MQZ9w!n`!p2~tDyzw}n^cV3f;EhN8 z(h0orRJsc-{7MsPToD0WO}E0zgd6b_=%c%F7rE>&!YXr$#wXDin79UYH6oY7cpvI~ zM7s{-Cry0aB(1~?@D7#HbuvP!aXf8qKuq=sbRkb$(YT4~H(N4i!0keNALFh?iR>Vr zIKuLz4@-!k+}{7v+dgS>xfM!0S@4HWMjM8HFU>hsp<}hPKLVE52w2{bHKDb$KY=eo zzW)N>ZpleZXeI0K7Fs#}jvMk{m5}d}h3W5W!`2Vrcdv$aXTJ`vZ`A1-4_59<)x9el z4-3fjqekGt6W2G!V#2cc4i{ohBRxoRb0nloP;w-ArYLZva6k3BdIwtSwN_z zgY+DsA0gdh>XO)EY5Mnq+IPD;I5W2Z;LPc0Qq{Z>7q=5DH17t&?Z|#~t}m80h}QjQ zu9K*GYM)fbvkxFfME3ejl(i&$8*m=OrJh0gR?*T!$iEf|&35B&!*_b-O>b4x8{YKA z)Df|M1tm;R!>>?G?ZB^COpW4K9?1nl#^MIKXqlm9&^s?q#Np&C5fW5QKVmpVYg6pg z;1f!uBLeOyA6fIO#Q23Bh`E_zw3%Wms2dL@%TYJp`4t}Z8a+3F6K2JQgu5mC2n&s1 z|I&mD&E&Z2YZxL@NE72&sgd^cHMY~5^d1>L|3P) zFRtbdNMR5JuPD)wmxKjPn&v8PZj2+;q!Ov z?J>jEulH_jHF@!8%AYF{O?8qDq1TG3WwFGRb&gou;|cfu(Thh{`9WrSMh+mM#J6BC za?SvO)_LO;c;I_0`_oISELtNmwEFqW7`OZGm95;2v=gGA+V&s>Tdx*&Xk*)6$jSN>~^@kMz!3#Jo~0k4VTM?u|e%q&hb#% zW?q_#rC0pT;CHP!&^#55#c{6pp-=cI#N?_RFKdu%KtT;W{omFy-Tlm2g!H(xXD-L| zZ)E2BnX`;T9ym7X?go}VeHC+-B4&FUV7A+0&A#MHw9DSEa=sarwX$Z?cn3FH?%Tu} zh5FQxi+LsG^ztCBBpw>Tv=!t}Si$D_s0Fz*XD**@whV9Dr#Z{ucJ#sNy^Ld$+#ba& z?zgn~3ewV5?h|TnSOjj=`O}ZQOjsHp3#n+YowM!f{dzys zh3kA}Sa~`2Z43`J@WzS4Ec&Kjh*pQ~q43g30Z+KKisv&qe8Jr$cnR;!XfDH<9aQ}iLi5Dvt-zOsA3{S@8v$v*;a zo-3GlLHfJ3dfpM0XhXxs51{Q!VpUspQ;li;owYVrwR`84JH~NF-9r4Wu%lgbNB(cb zVOg~1$sN<$%R8yk2C>GrP%WI;Qh^i8e4RKy98$nFpN@$V!H%!guOEa5T7~1yR`J#5 z5$pPn#1wCK2y6cUwQW}VCm(W+`CL4$Xswx9w(Bd`;I38Ovc=qq)I+cS(W6~k*5#RV z=`ufcx zvwC^9a=KC~6RTg>lh474xb=={Zi-LGb2k}>_2hH8CTQ6or7UTC8%JlrQuSq52Rbz8|Gro!5$2BvrP&|FSRK!OJDq{Yk$oi`AJjaGH92WMf1*40Hv1XP71HD9TAU8>0mxOf7WFJ* zS`BX1=#Dk&`x{I>q!shuj){vx@~J%!Y4v)oRibJBl62(rkzt1@>*t=betxL34wlQB zY$y0}*G}+X(V|ccXXSAXL&LDm=m!c%X za>Dlnf>9d*Mui&UfcF5LdaWNZCBRFAh#&G4IIsQSMk-4SQxmX$oBD(!1XG7R$IaLU$xxLpuRSmO#7%f1Ua}N0L86M<-b+mLV01YP1&aee zj@@`w8n53I3eQicEdZ4evTpEr0;gY>qK_C-t3vXnup)y$^OdYyGN-bkBYZpu)TqE{J8K`;z8fs&z8Aap z+v*X?%jwe}XoTv0E0^KKWSYo;}ddEZrUG&Ky3AMO2I7`87gRFM+6DaF3k@ zE#1uL4s{>*seWe8iTE{IAtU~<&=+iimSdfG|5MK*ijG`^U9D-EILQI`ZsF1brrZR8GgVvi!3B{E0Wr$v`{?gjy z{E{~`4^JQQ_eFes{8qEDM7(f6>r-v08Q1D5Fa{r;xr#7~6UvftK4&G4Eyj(^gg#Y# zXV1iuHV>quF#gN;lk6E%Uq*=fuHZ~rSkopJ_O+{Ds==vVYAfSZn=`AJvx2WEAL+o@ z0wFF=Z%SAaEWKkDJp#!*>HBi|<(G%7R;t6>&YXz>a@3oT`S#%GY9 zG30?yHsaXtdIarNun}^V>!RD^EVL69kuBCM&1BBCk5J9MWEp_ZheG;A8>nV?V_&bb=KC&TYMiTK49G9Jdyhg;wdTo}x-YPx$VUGMzEt6^|2-oipkuh_<% z>v=1VsOSb+jHi!;w##r;23bh$mQ_{7nOUS2 z!ASXG|5ox}rqU>HgHi7GOG=-=%sWgSs7Y*B<@Q&r^U*CevMkK0v-@#P-XK3Z>f4K4BaMA%gE*)M zozFqbpN4*=ej5F1$hm=+5n`c6=Z42Mw`}&^3yZn?Vxd2ltmk8QFihoqhmT>%wGUkQ zN=P?b^DljcC6h%~nWw~19AlJ9=IN?>PhKFsCsX15)$?>JJ_pBmLJQZ)adZ+t`+k?7 zyvAXyCK&3q>JyJA&8>{LU zlWTZJeiB3Z;g@3q$pn5s#^vR`bl;gSj=||FIM0ZW4Vi#rz%MHTv}odJJyew@HZj$Y zNYmIpgqj4%Z2_pyF9 zv>4a)%ZTGCMe7H#rFHVlbKJKpncl?8^45Olbnn+t|9DsHBGG-dAsYnlt4+{-tCCS` zK7YaCFTVA5iF&!+(=Nr;Q%SnotOoEmh*rlOIV-8GO`Ic_QV+*E`Az&PYJ<*|A#%t?p zEH$kr8!2Qk$Rd)T?v*sbG)?@);^}(%s-uY?V?W7A6R(o%w%HFgvUSk?q&6-Tx*yY= z)T4C}BES^g)mGZ+$Fz9~Kh-92812>Cx0*K6J)cA9kMx@Mv1j34s7gO0kLls;Nm_IK z?f4snBXaj{a4#pfvzp(wS%4(a#zWa(w0<7lP{Zks7NDVhm`lo*IhTj*)sJZlrR6X} znuxn*9^J|(LOIo0w%0tS_4EhWLP@0_wU7?O)iU60@=*}_9_FmUGq6>+H{y*{oaGSo z)<)^(ORW&kXRB7_z_h%bzHP>xitr$;Tf9{J~g5!)o1VGifx z3vo2Dp6EJ#f=W1#$%aZzy2jeoTAKKZCJw)GY~^hJ(!wD+*Y+4SDtxwBeA&YhW<++y8_E|rKU&MI0vzgDiO1uJie`AWs zq?$IAEmv1+s--W6J^C0>axttU-qf_jxAm3SoK3GY( zv(AtRE`7QF{U}QO|0dTeV<5!$K7g;1GTtM}|DD{b`uDMOtNaI2gs2d6T?s?fsbRa) zgaFf8h)3QSFH7bmBaZcmOTntra{)d!im7zGgJEoPfs1iKj#L@LfRc}((!8)1*PKHd zNIWa(r|zqYlQ`50lGq%yrsCF$5ayzu6f56VUi%^AODCTpGx-_f!7_;tShGzS{ly{H zYX_Lwj^|jyd$K%RZ%Zpd_icUY{4{dq%m2pX@orzu^8B(oj%M!}j{~{&|Jp5!DNv{kS z*VTmc(dg+2c@?Z-C}b{?hbJayu(o|;lr`AP0Z?irQh{FG*|Om z47uBS;LG=+lPiyY11r1Bs~L4pBJ?KL>9IL!Qk{su!}{)jv<`ni8g>fdVh5a@2j6#7 zKYWPPI8HH!-zqK)c@{rXhYKGaFUu>}wy}MRacP}2E*`skB=v|?ebhO!Popwlm`Y#N zuK-^DO|)K51J!5!3U#+wJ5l!yxN+^`Th!|s`ij=Am2kisjJp$jj8zINzZZISGc-+E zCgjb1IgxVkCdT=BJto$*1$iY_Ge@Tpggkk+n(L7w_ZfVyv8)9A!b1SpJ_xHk8KSzN zy&uuNEvkJ_p0-V?|4gLh+BUtrd|#iGuU>CPJNu_-3Z>LPV<};3xz>M*7;8yW+30ho zvC;RJm{HM%CDrhC6jN`-xW%8T^8GdTPWJmI+v59&STg<`LtA`LyEg7553fimwJ>CG z-cxmkcmQyMJJOuus3{4;wSKKlr9-G>9UC(0-li4O74d7WoJX#+f3z;OIFyi_$gefL zYobbeN_&I9tFbqzdUOwch;$GAPD3hTBX_-Cuzv@u`=fCm8(#h_)S4f7Rzs><$&lj; za|V77_vidX15y`_+tZUFgAwcI4vDOUO@-6HsD-DLU3+O7nYNd;sdcx# z0P}aBM|WGjjKuSk^dCut|2?mj^=p^c$8|*8eL>4Fe_6x++smKVP%nq<-X@K(BJ#^$ z(h$2&F=zQJTAy$vd|%Y?jRR8y1{-gt_alqhk?%57K1!10KET54$oCk!vjE{?%!pxR z5XTtH*x~Py5Amn5a4|O$PbExY80x_qvcepysc8A2WWcZnpVu~GiIk+qlU;n73$sqAbNiT+REp@XY`xUomvza46P8-tO!T8#!vjSX(6z7%+c`1Nb z_)L~x0qK1qX0{BkfcE%eaQ3%BI^@p8Ig)QeE#v9S~z>V8ohf|Od_+T{8}e8}YveGA9QlAIy4p^jH3 zz5DXD^2Ri4=q+~*Rl@_MM;h96Anmd6G}Su#40Uf70y4tJ;K-lx*uj zC2hG68|rLIKW~=pNB^;6Kl&P>3~T=r_25$2jTJl72P)}qsMwVLbH&c|O_g+is-(NN z6835(?6ykY*DHCiuY|o(3A?ot_LoZ7EtRmh4r$BU%X2cbs#oT<0**5)z(^IWSK;I; zBwhp80d3fN9e!`X?@jpq8Ge6(-&>PxvxbScuVB2Ul_ePp<^j}FY(icW@|u6v>UA_9 zL%Mig)9%V~YZ-V7dhy)18#tajV*D{(rCGMh{fxWpp4YV6xGFvKIhUR(*XfXMX6(2J zq$ajt*@0tkmn3$1YQze|7=_p;NH)(ai}^9a{oYP1B-csSjD&ec*|zW=RaN)+{r>T> zotsB2Gc(3Q>J^*!D2lSj=ktxP-I>SGwJfAukw<$U&N8MW7aQ*6q{@9yk?$$LPu!7j zmbM*tyP`-t&U|p~h!xDBZSEbHm8@B)XF!1%|GrZesu9+#oWEqprUySVV*E4hhupXO zdd9O_^? zUk_)n4t>ZvNOD$^K5WT)J6lKkrw}7KL+H>;sb^=Wgdyu~mqzQg3z0V@fCYWT>nZC1 z{~6F%tFsk$54bo~sL>vkXpdLm+?$wgCW_WlNC|84CQ&ckBo}0}k@ejND+6LO){@3&5Ag{8ly_H-;2j5%t|#gHi|ydZ9to9Rg0)x+>p=7Cv?2sAO0|pP3VwTF2^i^-LqS5ly>_yB`czi zSRL=VKwscUhEfyg&IaJ-4nX?P@>iDt#rx>K7fFhO?#5ux^*%OncG2?3_psf8Ms;^k z^A}Tr_?{qI{XhwB)6dH}T}K`~UXDs-Bma89bv;Klm`9}VaN|-p$Dhy~o#_!ki6YIg zIsmd1!*H6J0B1-1Y*f88u2X4CSf47htUm{>dkM!hF!tH>J!lU=W?R3I^eu$1@C7*I z^z@GdY=Iv_Kbuq*`iUPR;K;mwd{;`}3bms@^XHwB|-ECjj-TTmy=$C8KEkX*TC>w;0l+X?DIZVGup);TXAu9{84;k0kOGIs(j-T z%XpeG>s_Rg-$fcRJB`gv4(DmQ8NSPKxo#%evh$SVf2X=01vGg&{TbnE8nMiCBzSp_ zMAUFpd-j>tx(#m26X|)s2-Vy2oTk0TbZt3Qx&O|1k}XLqq@(3B1zf6*aBoQ0>u9oE z2EIw>cI$L<7pDyLkq}==sd^#h*IR^x2T$z|fIA33So1d;=fqQFJb=(#q~`E9)7r-TT~@uderzZo0}#4uoJRaxE~jl3?hy^e*D{ zd946DreK8hTA2Wa=)KS$xMAzxn_6h^Ms&n^RdN-qsGjsA?cRMuV9B@4TrqWdyrb^z zp`UQDtmFf%vPGW|k}`hBg#!FX*8*V%Go?aDi{2`2ZT4ckH+p!eACE%EwMpEGJQ-=~%9tT`v)PWg=>AH2)BtN(5ZTddXC zq6-ne!e8M5gGhD9yXAtZ>h&~^7LM1*Wlk^=-@g)Y2OFsApky3{b`>nx1J-}idyrIr zUQg~anYI-gF?{n{Rv=L#{(OuQ*ees)uq3Kie z;^Uq^__jB`R^JrvbJgAF6Frq2f9E+APkM{)wL%VV^8HH0|7>}o2iq(&JYSI4Te6XEMJ$4GC_LgrjDtYchPyK@P|S;zM*CH}-e zh|Z+Kj)o{rFo%Ll$ii@`0OG@Qg~I&u@?w`g1# z6I`l3Y3KV#xbD8^auq!~f0f<~Ai_*#|5@LOAvLc1$ zHhB(G8N1}ls~hqMb>eHKA+_?IDwVlo4}^uOXv`nh!&CB;9XCz*xzmK7Hcj~ZD&e*K zY%7Sjs!R{_@((W{8uKX#tV=?JD{4nV_K9*e7ms2RO$0>Q* z2rWF4IUA;G;Y?2pqr|Bxv5?&Dll^@@fc8cX*{Vmwf->n1;&PH}$2aXv3R+^-bEaI- zT;)tbO5IkMQiuNTNmkZe9yS?mYj}0CW|4+8a5nXyw4M&s_VL-{xu*#yrkl+Q_v@*+3JOW_**X3g&WORm1%v=wBQkdP63RpA~^$jJj}BNZ|2 zuv9Apjktib4K-S9j_nFIaLu(40xLX>)>2K1%@Y5h)>@X7&Tl(QuVPmt?CB1a5C%-2 zZDM9u`c#=^T1R-fTz?W;iLM4V-=#{$H00bX^y02!sQr)Q-4chHvhZ@#}7KwU{Vw ze4Re#*~FJv=1Ig6JJLN<>#6uBnq}PNY}}`l1J2z2=F?rqhtIn_5W73cRwFqxkoxFgXTHZ!~Noetk)0m55oWL6?)Yh1vcwUPD( z>ZLWq$knV<=vw#8)CI=|IFV~wl3Yzoa?zP9iz&x`55=f%jOvL&{SA8STG3hY9&&B; zIV<=%gD*hlTbUM^x4*!=wP0Gi9bnAC_vm)!e%6zQ8K$s(m9V*KtuAaI>rE3qu)RKf zZYBTym9U;l{%Sq*F#qeM-+B;YG62&$5VPa~*3%CqP}tr|*xY`tE^IIB?S~Sg$wYnl z+)DljDq%hSjjX<&dHr1CE&_WZo&6w-ND25J58uV`Jr2G*;5(1K$G;3AWZ!KydXc`P za=l1M6B%Q!9wd?_87u2SB0kkkY>w}}s-NVV_K2cyKH6i3eKy|{_Fgw^q3V8J{{q*) z!1c3=eX94kJdWNwv(?>mBAo$Q*2Iu=e#G#FaDQ_SV&uWFt@%3Qr}K5x*{lmFwO)Qt z`3}OUs>wuugo%MB<_|WrQDGeLM1l|xGaHB-tHj?g#scVC0tb^b0$)K0?H2uPw-gYB zMq!q4j4(H;m_D=7)J)we@fU_NN8YILPb_s~uO2ZFE;gC)3*mRd8^Rhf>|>(Opce#w z#>{7S=|tTb>BTx4CX533?9xf)kPwEPq-TQwd6jypJv&%AZb!J7>gx;&PH8Uqp{45~ zTofC|6DOmOhlbqH5QT=4ouk5YD6`4TMB13evcWjqz@jx`T^b6yS_(#mbZ0ZTcN`cM zde9}Joal~BY4F^*ni!RChWz{u0JYfsJ^r{hD(s;$tG(y(Fefwg2E>=t$~@>qdwLCd zpP8^-*dyE`d_%oocx+VNgESe^JKo@tPtx4XllUvxcA1oHL%E(Q8yL!#=bIbCN{fE4qufl=%wB z2yZz}$J&Fe)qlL%8hBPlD$;duZstp9+mlO@RUs~CJ%``OZiD;I?nnOq(f8}Ua2}X` zqF4^SHNKGGYwWcu(#E#~fu&s*bcc%P2+ zD*P5x6S18EKC-9>|44#K%`m>H{2HL_VoGU^Dt74uI_ls1fR1o<3}zWMpl*Y2ZA_d6 z0~oUlrSeNLDBX&03+ReoXAje?*u&81&L*2MmL0Q5LuBwS~P?>fiVWu$|X-fB2M z&#C&LqRB4QBL(|El<&87+`uCgKyq^eF?ZHephPymtScRcz zpQbW;$-0EB5M^Mc!`UX7W+n#^cuz)OBFkdh@#@I0h1V9i@Y(`c^H+Br>Ya!4OD@zG z*6~Zq9$muD0N-o43-SZy-G!$CYJZHt$)B;#gdTU3A76|R+iItLRh$WRv!ec{V<^={ zqygC(AF-@!pzKF0on4vAa@;m!K`aatS=|m9a7m3nezzmgn02hMy@N z1qWfD>|;lXl891ww*5i7*@27>%17o?r4N;0mnKD zze=-@9rqsjX@c<|0oeZ*sPk}!Z$7EcQ&7WLX({B)kbB>%F^2bIp>#Zi^U`ZH&E4gGk|?%cVb})~uu7ZZd-oice7~~=#>~idlC{QolqHwsNBi`wEVJQ} zJ{`vg&QH03y)@D^ru){6Eh&t`_&{rlMh}M7jE}u#iEeggPQX3;GTyuX_12=Uq+6r2 zWiHIqT>WH07Ec!Z{Jl2@?e*iD`?cRsXZV#^xMza_>#=-xK9B41nX_m=J|yIy>C?Hi+=H+(KNo+yW@T!)GM}le z%x63+^Y@;W`E1?F1pkOJuTw{EH&~ZC>ivXusiWk)0(oD65qS|u#1A8)3g};=s=|)V z7`g;TWXEL)d5!v;RanK!#|2!)MFCgw+u%A|z*$;{tN0ndiqXBV1grQNn5Ad&{Q~dP;p_y#evYr=)1Yk&6j-DBG^_Y`hhD|HyNaP4-@Z*_XJXB# zxi#C*ov2T&wO=?%-`%L{&dZkWywaV6)4KA$+T4(9+@nQ$8N>fpK;eop$Y;ktt#7CB0uu4y!vSJZ0A*e>V1%*E26w8+0TDK-*IL!wW#wnpUH2oXO`)Fju&?h zRBnr`1Tnua$Mkm&!s@*!gZRx+3e)>wJdOgiCaVY8m_C*&rf$Ifp!ey#pR-_3oC<9; z!*H{}3T%V5Q+SS_6S&6rZ5+!0TtK707hui{&+&6YuUmn%Guz4|@N0lhap%8Hw5@8N zipKm-8TOq{LKOTQ0L+2~gsIN~FK?jgzB3e^6)}K!Xzx!CzkGU1_@$X(leGln=Z&*< z(j9G7<#p=$PrUCzQI}R#zUw(nY^-vBqu)s!20gu?Vh8j8mj9f8Gyi4(LjEhK$iMU7 z%)jy9%>M~bez8XHTZAZ=b4deiA97I|$GdKrw;;}>-Hu!<;|bTg)9bqEmGNqHmfk>r$F~KViuF)N@e|$xeO; zJ6%7NUI*Lwz%;x*@1G`oiOT~d*4UdW8XL*pRMEJtlXJ7QGHcNsIV+&R6s%96G!Kp7Wj@YTj3O0hwBMmgm+;w$M87WhrENt!DQ!pV{#o-K6h7}g}c!pb3C z`YPdJz!prF?hZ5Vj(|Jlx|>+0yJ|b`9N`!@eU$Zdmu&~0BMiEsMop;WhBnuP=G{=8 z&Gm%NrciIl9Nk>h5kAvDL%N8)AKE%Yd_{V{C@|AHLwqw%u2k7|wvg1@*{{Wt@gGr? zt?SUIuq(hyseC*!t*+%2E|0b0v0wLj7|>Gg?ap7l-Om0lmaJD}_p+gT4~M$`2EKjd zTLHdnq>`b+tuSIK4%tx4;;F$719Y15`pzNbl+i6 z?+p0OgwR)@cXAAKcSFc5-R$V-S>PYqo6-5V*Zo@Vcdq+Q=-+!u(R!wDCk;6X%x3#48NZ4od z;Qxs6a%Ur*MF;RKQVREmGnIUUk#FAKZVUm)OGI4-l7h1HM4_ zlzEVg)(NfeWzK!)>dxM7sP8}&cl5Q8s$|%$_CMPjt*wC`f2yI}<5kM18;aKTk^@-OD&;D& z{OSlnCDV*BSnvNM?oGhks;o4v9qsA%Njx*>SHW&wPzJ}9$>KZ{UDZR+o;3ueaOKXz9(ZJu;x-b zkv1^cff8+Q{-@)yzp42|U&0sK4@mPaXPJCLmFa{2sPqOGbo4Tk-hi~}<50FZoIJ@hRhu5j7ee-B_+I8sPcJ{fM|Zh-$BeL|$O3SmIW zl>obDsPtyuLv}$A45KuZz32p&%^j2!w1*;m0sAP3<7etpKXfg%y9ECPim7t(QyV=B z%~XnB%b+~6Py%JnFVwA+IAKWYL$`H<$73keq$4V`bAvtS_ z!zqOr_>FBvn=sIVoVd4*IW~ZlB90kXkVgjfI^?W6)MKy~@sV?gvjalaLG`_0fzu-k zE%HYZ)~pKqphYJ(;{TJJw8#OHNy3WPyezW;_Ln9lDh8E(!NK)Y_~7~`PU+S`y3hx~ zL1k}H`b&BOv&wD=lay{*s?-a68o1qj4PD9*vo}bthFTX_L&-w+aYe0~-8#(3#?oFT z-Ac3Vjb{-53+kKIP&b%-`|{?F-#OVnxmvf+hu+4kqg}ea5qI)F*vUoBJ5XjNk6WSM zkV~6q0M4{i8ev7~_9iGT6^I_yMS3`{l|B0adbR{#(ZYqk?g`@P44U`_+;GD}jb*YoLm)fhd zr;<$A=flWslG=6^XGE5ERBNQsExx9)L4#9uBaTieTBnh&@t@|zv0>a()%c&de`xhY zv&t^#d@Jnt`3^6IPOC^~c&3<(oVAxKoYi#F^j543ObM=?4Rg@mC4(rtRI@%-EF4@9;c&3d&%3j${ zY=3~-ACTc8>?gY9YCQ`=ORE+2*ezxD?Q)LPlKmM2=g25nX`6>@WdKfR`^PZ;cVds; zoxH?=m3SwPbyaklR_*Ebbkkb%ke=KGv+u%r4MvwSzpvmv9;E_(21_nPPDvTcAw{*< zz8g!bjeb$Le~h7K6d)*nj~7mtg)15lS`Z6*@9-}1uJV3=mG@j&!!Xac%N%K)c=Ntv zk7T)hdpG2*iNZNF0^@%>^1BS7-XrM0eLI{(ExUtR^<9+V9RWyx2KB*58+*#|_POkeX7i#H~sq8!OygCwXfWQm}Xa-?c zZkJ~jrb*&^KC|zDuc9gWxG#K=BDoInH9i0**kbxW1pkBdE?K~;EI1pxea*0!79~kP zs5mYuxdiK>oYNau`7n%yJw=Vv?MV+|(YFvbjko7c)l2yFBZ;-}ZBlltIqSLv>J>*= z#MBn+F=+n}5-B*_&AF|aQ+>yI4ehupLp7%li=7ES%+PUu!)wk!U%>Hs=f`|C-qx9? z_%QD^B!~V#$u_9x2gy3J5Qg;}9$p1^;ytX!pR*<<&tas=Hz4u;09zq0Yprr{{QwKI z>8f<$|BDFUhuQ-9_-l!~{L{TP-WLBjxvMbs)ht}qrb<^?ZXf2p&^z7#S-D&PPr2Lw zf6RTrr{)e4JTwK)k~rBnp2Ys0;M+r(O}0MaTr|F2vsQho=4IuUn){R+Ypz$Wtl6k| zZm&6Rg7C%Tg(F^K6lL1c_EmS_VAfrI5bLfv0I;&@gvt47ZGJ$n?=4DN8&Zz}ylIJM z!D%w2{#(KA8&W?H?vv47<-HEhg!{cudS6>rHFGLL`YnN*JT297JgQl^<^<9T_&jkw zK@Bwp-+2&QU5%Vizh~0}Zaq+a4$Vm7L??1PdI0Q!KTH;ql4SjHvc(XhmbMGNhkSSK z67n~|bs`^VMJZ~epJKlICnKfm;mNJcZUt;itD-NJ6rVwsBo|6w>W>WzQg$nx*L8!P zdxGQJY+T(K9it=apbDPNu<|VIw|OWVVU>89Nb>+gOj~8MbhvHWP@1E+vlGuzOczge zrT{`|fq2wKrA}aT>T{H<(vFYB)8f2Bvmb%nMC52awHL@-hH_7`Vn4ENa#rIwc`@%N*R^Xh36-RkH@P%CVU-q9#nxqd7PkIxPZRq8-3w70X; zHlc!cyuT`KZ`MA*MiXi6w?VYVyhU2ztb2%!lHEYG#C#!fgQE1$h@Ccm7esr^Una|! zWXEt4+V>mriwd;CWq4N9=*;^l;0X8Hqmsvzk(I)g_|;4u?R@sO6{HL- zWsi!sNlH>t0PV2{f|!@AC~DZ+EVyLIgAjst6|>-yArC>wLzLzrC**!cR?5{ZxVmeq z0hW+_tIs(u5&k{1e*(Mur-M8*vJ@b$mjH<&P1<3A<^0||y$`MQ9N%D!*#lifi#P;w zbP1hhJHW;8bvu(-M%L5@ z(Xi&kI=MR!;iGj~_%Cg+m81dBrT4eBN20XBA(~H}MUo;91N3H}oZ{zgbhNS<>odQ# z9i1%b&VIj&RSm~C2m7nc##rOQkaM

|Wz&c1>+7k&MlTXdi9&KY~vtU5&VLro2k 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 z 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%0D-fGtf? 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

DTB!nLq1 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�@Xo;*7CPv4EE1;cC3BWyq1!a0`4oZBJV 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⋘1{5E&8VbkNL0WOLC)o2&YKHsrzswd7}Gk zj*JX1(P&|6Q?Kn9`rd<yrDueeU`FhECm?Zu8;_!i{Z zyY2LbN^M^AuacVkS_@8o>(~T}6>h(d!6$0>p@AGv?X?U~%UY719@5yXJF2zTFh!zD z52osFI!UKvC3k%+%k!jD_8Sl~kgnO7wosWUNp$YSQz}gy(to+<&da?L9mw)_F2TOF zM(}@KxXn^zDDCQdqeI5b9I=Dyl!>;*j#ex}Xv>eDC zU#^dQ-n|Q)s&;JLWl|b$`z*?+^;U+K)v#td<0`b`mc%8NKej&zpdOn>#p?nXk9^@iwEFF-Mwt1kQVi@(UZ8a+ddBDSctD zYY`OZ8l6Q(ZrOXRgC}YQP0T^t3-eaSqnAiysfrMu-ZA*26$mQwI$_Q<{&Yv1IU`Uc z9NDfnZGCMUj(zN`lomTGC@vJ)$F6!ofY44EsqKxVCvT_i{HApjoo_51x6gw6W(eCf zBJM*UB9SPcUrLho2(dVkk1ts7@dlDU^C#n=r6t68aatEK!#(mt+>h@pJDIpJQ?4~u zk2e8nGN{85@=-^J*zBh$CPUu}_eoa%P#AMhl`JPf9hYkzzO#r8>T5XoFFCUUa0B;hu3yfvwU8<@4jveyFdip+*mO^bOBuxxB`?l#StT|(mMEW9XZ*gP-JQ6x}FXB|GUOs*o zFTO4E`9Z0!Ch;+V5+W`S=KCmf`Ixq&lkh0rEZ4m0!Cjd5yp4SKs{0~lY|tg(fI>1w zVy9@RhrtenFB9(Rqe8_*?te-7Xhb1RM#al!8VS|mI>CtxDp#_9c0Z-WWg4S=MH^iG zf+rbM#~z0RCf{4m1BaAy?%~9xJT2D;2?V=u2ZygRQ{h(~DU6cfu+8K0avv-^f31J> zQXl@vL>(!Ajudq&e6{c2E5(L1vXjbw8Ac%!U)?R;1R0hCAR13ITfuDCnF3a_hEr4T zop4q%qXy-*ok!f0KGxpKL`dcd`JKA`<~5ql!qf3St;628G$NA6N1N>AbS|(>EO>HZ zw+RI65$_1yyj$om{gQ9Gix-|qOd^Mlu_fZU{DTq{>YJF+jJn7M*86}0;^8T`6DEIc z)x3FJDRC2Wx)p5sHDP$uth_YQQHd&CFc0_BnwWUc1fg&#mtWfZaE7P$F+5LMOGlND z*^5>`R6B6s2P*KCyekcLZ?o}P1phF2uqi3<%40*0Roj<{F9-P=Ur%wRwavf@MyaaI zRgDkMnkuNBmTqM48@uQe>N9st#2;w6$M?yDJ=5n`7KozGIv>hlL~51HR?Q=^*y(lR zu-cSI^Kw@c>b!!Ok8fU&{C*$&*lc<`^>y9ZkEzMyVf|S8zL+3Mg%w9enBC$VLvT#! z8lnE|P@~g)V@Ia60(n-=K?$3R;dHc9+CNb+wW5M9#am{&bfH|hjz-0QH4%JUxQfi# zmtx9H2Gt`qZg*k$p#j9(%yKLwtS_6m7xrTL($E1%;$6@uyPDLSSbL&aRGIXHpR?1r zsv2eTV@Y?6>QCQ?+s_^tw&mV1YmeL50xrGua|__Z{H6>TVuvJt^iHQzzZ+a-`*WTD zrkWMEK;*@t^G=7;@J70{UPehB8Vz~Ow>-sfMMXB%f}bnfyve*P)`;_Gc*OITalf~+ zU6-%FV*Sd^%VYdvi3(<;Ufo(7NY~v}4RU|q#7=vVHE*Gzg2aI?B-A52ZH;-L2oibg zr1$3X@4|7o3Px-)aJ9ISS8=Ft!+U4Pr zcdBY?(LWiH!?EQgeG7?F6=6k1<$@ZILYEISYvAdTX2NKyH#pLeEU5aR8yWq$f2=lF z_p2JbbmTXQ|)N7?(U0Ia2 zH;N1lK>3lwYzn+wpK-TjsJnq#H0GIuTa$=$G*dK(=L&-UJDLWTkEXXxL;*GiAOt>% zP(6kYQ=I-m-8tyxcgf4wWNmGPALYFFU*KG4Ca$C=&VW%T9@}lAJw%H%CZaY(H0jnI z2Sm)}NHJf;0Xr9^4o|55r*AzNBWHli@cn$p2e3 zW9shW<@`UwGyjKuMEc<){C{g^gn$0;eMF3r_1-Bg7aE&MF{65ig~nQNmmaozD7|WzqSKiS24O$Dd=vxNYM{PZyh? zOW~DSrnPgu$J#iD>7kXu0U3fIZb+F zQ7HB4+idEryjEE7knOq1EoMO09jWeGB$c}&Po!tI^@8<&TpO*(d&jz%^|^@UTjIEz;K<>=D-{wI0jt zl#|so;B%1aTYHtJFevoZO&Vr zM+NoO3kklp7OmA_U22L>7gFbLUs{HuMK}$nI<)1(1Q((7*~qP>J9vpHB&`cEiu1Te z3O-OnDcB)#F!o8nqDhew<_$9`^JaWG>*^|Qo~;X|+M0hY7pQXOl8o~#ur(i03a5%2-o{Qd+ED6mdh7q_st`R;;m1C1$_-S4WLt$ zQ?;!pl`+e+X^U4G2muN>WHT)tQkN|qR(UNQ?R)PVUvP))b(l30YN;yH@n+P~uV%z8 zUl+>C|0;fK-68c$xaQfPt43kMW-X|Q+&4D}YZ%=#+fO==m2)Z=qz1Jlaw(vJ zw0z|8BN95Gf{5l9*8e^NqA5V%BR~atDa^5LAf->U9V`MZ6yqe z_@S$jxL@kSFG#Mq+W3)EJ%OC#i?2TVofe| z3X`J&2h2AXNguSaPWFcb+Tp-9olXqKS3hNdfP1B~zBb$KQj>rh(CHWJZw|8^H+44A~~LA)pCRE9&7T)zkZLyNTtoj#k0 zY%BcwC2Tj(ew0T}i+b>xsdBlM&Xff_ zaA8FzQcC9n%85oSN;Gc=uvE_8bLAzF|Dy-%r32N?pucb3-(jMf*#a?;$WV#t1kvHQ z_F5EWBDyrNa;Ri&Q!Ydar&3GS^=%9UoVc@G$Ax8QnN7rzQIh)WSKi7OTo9Wwz;85( zX%LfgR(iO<*^)$$YnS*Jy>C=ByCQEla3ZYBDRwgpYDNGtE0z6JL#G^nOClHbub$%2 z%(l?8DpJU{Nc7w&EkC?S|6GDw?otubfC}c!B*EA>XpO61vjTxh5sdbphh)f|JEDN(7!jr6X2oT;t1TPk}c|BRuRni=PCNbda_?6_Ko zeDyW`r_C27g0}Z=E19BfT(y>N42Axk=n_5c+1_<4CqwcdUdsG`3z0Q1#chh~)t?Bp z1a1`=HWa*C^P#)pyxOBCbA1Gy6`x;wKY0IkU`0A+9+n!z5Zg8zVH(iZgTtyALP}Yh3TVxfyxVIK=D=n=erVvf`2tv&ZZ9nb(HD=yxJG$jZ6VP8E)?^BmRtXDOIU zZsuGxf)JlX#jY8%yrz)f2>o4&Qv5<{wfp$8Qz}+`XC51_1*V7ay#fgL7HNKmq012sb-3i}x2+U*fZKnSyO9CCCRbN`Hi62;`4W zPZS}9*IyLx(0=m$_&5fo?(Clw=s5%rmI^bY=E5yo$*4q;cU<7SA`TZ3I%ia{T}&sh z(cj5{o`>VX^tp6O!(HQPWZE=qsw^s>MS38QXzz}kFDc?>VT^@5^Y*(#2qrj!p%whf0fFdLrTC9&M7lMBe zdR??wII!Sq_$Nzznws(JG^pg^!~cwtFFm7N(m=29c^SFJ0M$*aXt?SX-@HQb54gp| z1$lP&!BV7IiP#!WtFRdZm+Ib2!Ct;#|E9%}q=6N);9(QQ8eLPiP&Fj{Q>LzXjL6R% zPJzsXd z(SaUJED8HGc5S(=HZ2a1xF%NU{ll1MRUu$b9O`UD>8yazQHhgD7VNxE(kDDs(x(vy zN!oe+6pn%+fwO?9mk+L#!9h2+Mz>%8d^p^+hylPT4W~zP0Y}YA7X^LK!#*!xqUwX5 z=;;yvzAeCm2Gy2D8}htSGuxRB&N7dvC6vxj`; z>n&glxNp`t4^v2Lc=M^IEp}4*5s@04{yJn=n|#|ZK{Sd#41OW6iF=~H8aB(hP&zJ@ zkheU!S(opRdJ}_wF9c~TsppI9_b9;iHP+THs0+1$dAY{9_<@mpRpktH6dt?EZ!6YzFn9fMJUzru z(~5G!Cgc-;6i7Xb2{rrs1*&s@Hd%QCxK9l`=uXCPP$d~WLuYb?*W7WaT-r(-3T*lSqdKeUvGb1@~{s3?EeXz2H7}Z+AIe zeXofIApV*fOr8^1cB38Ys;9Q^ z!&aei0#>a70Z>43#xGA#x&yPnZ;)>;Sn%Y7o3V?9={mt>BRplqj=8MbxhR35t0j9? zXrmQk+5Y4J>UWC1e<|CEh!5vul&YuLGAIC5IA5GR5*v4n6mZ-1Ey`z?5`*~8Tr#G| zuaKR|;1!4%-5DB&!LtnIC*^c_YonM%{59dZaViky&$HDQxT=L83=5G7I4|?TNR>I; zyeky6Lu9}MXm|?|e|ze@GHi>BeDLnRVGw^9dHr}K(EjQ8{#Vjg)oEmeFz2m6z%_`P zCg30fz9sm&^JekIC0CS+8wdE7@XN#k3V#G}E)c?qwR`sRD0A)+!bhM-97bfLH=^u% z@<_#?EgbNB%dX;uv%jidpKz2Ic}S-a8^^(}H`sU&3_<}ElUO3AsG~8x7|Uv=Vaq&H z5VXl4nL|89pR1@dXio2tDV{GiT}{>O^Ye{qz(af2?a5hRxmF!*Q2-1i`W@yK3_(j34tOu6KPuJB-jL!?7eNIfy#8%D!fQt_7N-x-+OibVNz-rZTAI%?iL zz6*GsGHj8-$U)(qC>e#=(PBD|MTrL`C4S@-)-{0s%|+MgG55M=<(5hBen2vwbDuUc z{nH70JSQ(XdA>TQ4pd96XsbyDJje8SGo;#h7!!-%7{7Zp%xkkQF2GDi*t;_MRr_BE zVCIB2e?Il{q->iT&QJshqkIf|yX5ERbP%2R@&lIrr5s~0eP5PlpsQE14d#LI`M4be zkPz%1a}HD-?;RldUgFi0)Pah-haYE457HUALJ+(QOCDsEctV$f9V&BC#?xOT+-5qL ztZmF4YL5QVyQn4WYtrJD6A^qARLkXYd+hlA)PFAwM&lqBGvFGNU#8e9~j%rqX%Xh3F3r{@}T(s)^!f1 z4ke>4vF*%r*YE5w_?n6>&+manJEWi_Vlv6Fk^Bl{8>I zn~%R?Bj?KU4}lncDn9N7tCIeZjO?wYN(gWg*Ua*V2Slay`p;-9qrtTuk79D3e?`7? zSIrhA`tz}Ia)=m>^mYLl6Msm)7MU~HDy}Q{h^Vbd(?eOhn6fr_>lc-W;m!aY)4V0M2)WN=r)ku&&Yx zC-&zzEwPqtOO5TV`17YJB$Nlia1tA)J)Q%QFTeM`U5b45G$9uzjxO%gZ9ktP=J_)! z8)>APzdImiX)(v^DB12LG&3T=d&QFmw9Xl(CcHXq8fwd=6AX9{a`Z_)_^#gJmHv!A zxvI{{Qs4Pz=+S699$F4F_hH&}ET)~t=`Yb$w_lkHTtBw}2QkIsTSb<>u^7{FyZPn@`ISnbVWpGOq@s@6rcd0FW)lfl6iEhpp#gwG3)gYOTW?VY zb=PuTErvQQbMCz^vWFyr+CM=nVv*IdT(`Ksx7&7-r zDUz#^g6;MSItTZZP2$)|Awcb%_Y<$xfwbEPi0Qx3`dQv0ALjBm?;W zeN0|r5<1ceqyqMuBnMVZ`O>d5RmtFKBei@^1|HC`_Js*;O6Thf*5&Ubxkg6-WaYTA zK%w@bmsUCUzCs+k*xH%9_j#+Ht~htqkTzQ*FsEc3&~PZ04dgc;RJ6vG>Lml8Q!8ppcwW z55+8tFv_R*CR1OSR9N_AE$)N- zs5B9YFQD4_25{RxK~@0Zbw2jxS)q1GX>Y)j3RyRR6I$Qd~$Y$dI@ zR5Z8ZBx3F#cOYiH8_C#aoXRo2W-}0&v9X0hAfS5id}euEkQeH-6lKxk%*VId$=9J| zPlmW;s?#!#q@TZ9Z#1Ab(K^8AzU+YTV0rcC{L8F3PC?80bW{eRnL&yg6$+a&%qb5A zl=&1lDkczV;X7B1gmer1ox=F`*k59W^uekY0-KyJ75rOc)RW~Gzdn@8nFh_BQuJY3gg z0`0Lt6k~kt;G_OUVZvbY9*ZoJ_(brS?=_)PF1${XKYw~;wI5Q%)4|v{i_yH@@wCoG z!;_Gl)4vOWn%*lW0Pf}xGrDBjT+(yi9MGvDEy&E2qZ@sQteB*Y$CLvk>HJvqN?u#$ zOGNY9 zXQ;c@pM1GJ@DI)_f9p?Vbwm$i&AE38dQmID+kO(+G8agu7VgJd>SCH=J9xP}>vQFp z=ck8J;OcFlU^1$oN88GC-AP7H17slZ(|syD%;X14?%7_Ea^$@xY2LHSF#&(DVa%2b zde!V({!}4bu#If!UOnyjtulYP&b%ue8qXijT_K05FOJ^1hsA4g4jn?_+(=82d@l1( zA-yYVtwrc?Q5tCvepqxY7QP8CnzKvdKVMHxVZR(?{_Ga|(fixJ<^Nh~ z)Flg}s7L|Quug|19`CvqvA3fnUizP-l=(upG7qoP9XN7(i2HZHTUSE>>FSjJ`A^tQ zi)g(HVt%(I>HtTsz)tkN=Y?cUN|6B`Xj{(d7c|g5l@R-gOv@lzWS_xOgL@ETrSny# zQBU~UW^-?NSJ%r%*+=q**U0|P>U7Kbp$f+=G&kq$JwzTwFME}g7XEs~Kl^9(r7=+0 za?y3OBdn(mf?|aIJmFJ!UAq(JVg!=M>BqzAlTfXe}nIz}rEHI49?R)z_hC`-pgs&#gRCe*C2c@ksbnh0C_3KL z%Kex6&s|KBuh>Xs0a9Kw;JDn=fuvoyNyd$V!mzE&etM^%W9)k7Z^FKXK|Q$;Zxf!! zz9>a^rRJZT?SEpakBv63{$kIHxMBNH_rhWcKK`s5?j*3;W{y&J8;*F}f}Oh}2>#O} zMx-Is)@LtiBJ7Qki-hR@Be~v%_F9Z+5M{2$P#~M%sK-*qR>ruP9#RbFG^(nnIwh%s z3-{cA{o5(9>T>Cgu}weu)ObmPMn~xXoA;~#KNid$*LhK|kgw^waHknH<}y=znN84u z%ek?zzP@S(E-nxCN}$g^D?;MQ z*wg&a7k3IFPh2x%uCOmskYrk)PS-i;zmwl5*^Q_CffADDNP!Zt_#ffynX4gKu2rMR zbAQP{klv5H1Tch5PoC@&wKq828?YhF)Z4h9gP@1z{D&R%83BaqWIq+P8m)@j)PKuZ zCEFh7o@uow_Ao~pw*Q)^f-EDY(sEeMF1>rdpH1eKkg32iS<`$pm;CJdCySCkS^vwA z`#Xi>UZE7>o+Bjn2CO8&vz!?HGJ2RTN!_Nn%^|Z#reQtPVg(Py1oD|0&?SPF5GIli zdN2KZ0Qou2miQaP2YHFR@ssqf!URJoRzE8Pjf(xa#kwXW&RverT>b2E<`G@!?YTr}@_NbFkOr^hY44F#@M6jw&DiQ6kA4C$6-{KbG;1@ot7zXOr}T zyL&zqqkqHPracB|kHRR)#RKT{pqo<1`NHMg{bYnasmAr(UoES|GJw!)=CN+O8twK4 zj915TO#{ePO}rpw=U(cN&xLvu>-EdvJ{>UKA*W(JzvK(;ZV}6_j(HNjM>~Rz{_z?q z30OM;((3dFb<=ZfaiBRGOOsk7q1<3<9s&~(RotL3~+}u^R zk{fw}_bQK&`=scodYMzyuBkoxJWhUzg;z+Cz5>1R3YU@*Dr4B&auWS6kZ%UXwsZqe z3${^46^fX*(3^aL-E?~(9CW)QMioeyzcI{Z+kI3ry8OlZm#o25@8D*_C!z6g7RS#X zfvw@3WmB3P*ZD(lDlCOGITK+S58vWr^WpOEd(CgYA9JHa>00p@m+C-1m}_$^J;ro<)+D z9ED#{2RkGJvo220t@m`eDY#j8dYXbIApAXpC?-W&UbNGvjS=Oacg>twAFHw-$d0vt)Ya|cG4;P$d2 zfHUBN55oONoD7>RQe-paztP?M9tbvDxcgL@+i(#~`W8jAnPOXhsN{UK$D4_JPqp>B zdg=y&c$;_`1tbfBpFSG-*#M##i%;;#0uf|^0Wn~<5F^Vs>A1DV5!TI>CYJje9+o_k z|0aqf6KC?;i-ndvDr>-%VHb$1MTn|?a;g3QMQhlv9$QhU*l+J3*`AtE5IRDi6a*U_ zlwE>Lo57Uw_oX_5IDwo{qj9xHU#0D1QY~>=pS|G1NJNSh1x4UoCtuMwS37rdJV`2) zBMi_kB6cyAj06ZB63hp}M5Bi7Y}YeLDkVCDp@)kxjbIfKu>&^w64K5VfI~L_3o_-QVHSTnRTbRb16&BfE7xMajI{d`1O_y4N#DG zo+Ru82(m&01LQ*~`)iAU(J*)ziVg~<5xE~)lXjgmt#T=PkDoR}ZW#SK*j_G7)AG_( z2BLcPCLFn_MI&M4`n>~dF%`~&HSZ`H&+@lra;YChnZ8Q$?J^0;D6uUpX37US%N4Ss zS7yube@;!Dpojx#tl6i7o5x8QOWKs>&xXuoui+&Ekx@P`raheiP zVG)zd_NE?mK9H|uIv8Y36@vF_rDOJF;_0x}%8Ag}2~(CEYa=BpERnMRM=ZBPP!`Rw zg+1G=pivzr3mvnroHPyuLS_ci?+bzcjr&PQrNq+eiScDSt3DHtLfFp7Fp*!jA2e<@3R2g~rAcSN;Og?N3q4jW4~a_J;0%fv+9zAccIP*vexL zt-FGt^}6+Im$C2T<3)dW_4B>{;ePuq^4s<;ChTO+Qsm#d)TmB@P-wGhZ@kPb#pmaE zo{p`xHkCf|IxZlX@Vx|r3C0vI$kAZc8PrzUmhssDXgpN0bv<=hKCku|%b86)UUX3y zxYl0(TlSECepfY3XPw22Cj-P`sJ^1_4uiP6p|>P#-Qol+4IA*&)Sn^MlTLtL!fN2qUoSWhn+r& zfU-a%fI|8`Ql8d5dJ

!L5Rj$kHYE=*>qlT9RDSC8uGd&}m+u*V=+uLt>j$GsTK8 z7BQ@_Ou@|C;-30V{BcWmRHjG`xK*qvlBhIJo`&&AaoQ}=kT*33(M}4O31D;@0RbPr zgJm{|rdMQv*4v{G00M2O%bfO?cRw$~WIaN?1V<_KX+#F>)!7ap8jQ3>VuD@_!ri%K z8|;Sj_W9cw6++#)HKQn-N+9Rhq0bY7j30hAK6O}1b%HQCBrfsvW1_FKX0C&a%<5T3 zit!A=KjO=RootC&oWFc&E&1&7b~GwEv6h=(ZLJ0#rEfP1Nr{5(06zNuLW?K39P#5I z6mIUdp{|NpAlzv+n4*&oB3<(9BHaji^u&@C4=*Q`MmzZf-8`P-ac(U3Vl;!ELzbQo z*@&sN@xZVs9M(nOt;taZUiY`r_RpyRc>VQ7Kt)IqwIsfmofmFDbXyk>hCS`mB@UK7 zqIfFHwAA1JD6sOa?{%D%f`@S5nr@`|a*rW`4@o4+!?96|_u^3QQ_hkc%sb-uhouRb z4vB8bRXy-wG9TPM(cB7wffxt8e$R6>8W;-PHvM6g{D>LW5eylAqAaEEonrd6LDFLW zIa5&2{%<`2ZaKQAWZ?plp7;TAV0JQHmSZ5C7(_m0>Ay@cFAas8BUzx&8yt-g1azo_ z>9QqZvec011r1oV85>%*Yl;O1=UDvn<6Pwkv|niGQNI|0WRE9ORZHR?+I2$GyM3}XFafI@|P3p$1ycZys1FCR{U`#>5m6-q$DSG_4B#7FDq>szL!cM8FV zDxs!gbd%jGHCkoYdzAvYJoH(ikoI=r-Vpqa9y61m1q;pH0Np*p2Vm|F703$&8p;<6PIDR-c; zB@+Vam24uwlf*-bSG2Z)He~$z^M?`UmZ!fR;Q{}@2l+=y!099!Fj){pFbIZCB_jYz zjXnl}YfPf|pDhzLRae*jwc_;!PdRvL7Ls*-I?Vw~h{C1v7=d$>cSUpR-g+ubPB*N2XRvH`cT^U&WF04%ZYY*Rv547}Dhug}xq^&LlxdW>MxX7J z!;?_6;f{DFB`%H#Lt9M3Q#{t_9=6(DV~nbg2vVgB;RI*5C1^2%WLNqze@`Wk=>He0 zY*B&x$FVq;Ohm6tdFOnDMpENc6udQrv#u-&%7RZ+wHSC8QH9ohLKlU7;U&Q1Kg>`x ztrsDjnUD)Q8ct&GVhW=z~U!=QZm)!%DkMX&pHr5kfkIzBW;w2kbhU{TKD9WGygAhTCl~tH9_A z|Ds@xHvPtO=dx4P`EZym?CW~oFMy|Fi1s2TSiXkGc9Z`hsp#B z8veYg83)iTpJ>rbwp48|D*@uSmb#J=?Ub7SNpA6fONi|UEG9SCJ|;0lWphNBW%UYV zNdJ^)lQAE-`5pH53K`B1-P?qIpoU<#d&Z!GWRdy?AeIuPg7oHNn6isqGl;cIO z$OaTCV+)q-=M@rbZmV8L96FOD9u2&^e$bA$uC%O^Wfz{NN# z2L0I{oPJi))$R#5HRsDTlID>tx73E7t7L4HA~ci@gBGJb;);~UZ=z#RrFK(8osIv5 z{8ANzGS@=%7F*?NbAcneXd+4A@Ey;>NeP6BNE-NAEzpnT1;0;lACDl1!#Kb^S@cg< zLm|qk$FclkVy!u=cJJ=0q(v1<;|cc-a1N32G%#i(wM~FeE=>VUgSE7EGyrjwzc||s z@cPFuIpr!L*kEGQPFW6+Dj-n=G}}Y_*}QA@!>vJhrnD=EwdMm;10-eQk&4uMEw0v& zApaw*l~z~M=*;OLqLI3f>TW$$a3oC=d`ut-;CZ`yEvf+DkFF2tU@_YV(77xPfaF3y z)H)h>y!jP&uW{Nf zzAHjG-^lv4s3yA48%4su7;^J^hUmv*;_>L*^CQoG#|t~&`uZ2d2ge`b5BN4*^1y1+ zU=!)u;H`LVBopL#5(bb zpUHp#UVio37`#YY9o%kQw131$d?$2X-{;YXUejM9nno=uVF0@;#pDMe`o>9>~z&WIL==Jn7Wg?;L1sck9;gGJU`ye|XjH zrqzD(-BH1TG@Ui1R9mwh`58k$&kv)wa?GZ2G(_TLgZa3K?8Wk7XLcG1U9hwBT5>wB zHm{l3tqO};L#7$TL_9``giTR3NU5%%F<4sC}+5XqD3=l$}-)}j##{!6M_QS zvh|cdb^DMwqfXgH6ilKXXRHH=%s)ORRqNQHsi_n5QnBHk3_13)rYO?8)n1n|ix9)( zCjX88dRFd*SaCpCff&)xn^@ScX=?J$bj}M5O^Q(jH{-zQL&)7O-$BhHJH_}QY;(~ur$SWRY6+1>~5FSRq;Jr`Q-olS)HE&jy5;Cd|@tLc9o^4Ifl zA&4$l;>q~K0V}!Cn_*w99DNkYY4+EIN$Y*a$RO3NAv6eJT%QIoymNuEOv96E;MN>F zOx&mkd&=fE(C*J~aisf|MmI}EcZYhy(|4k$+spVAURDBvu5`sbA+>o|RJ{I2+W4K> zzw_UHH=VHe27eseiP`V^!~^#;aNB-{YOZPgKh7)&Ow4tFRf~Jw?-jX1YptgK>;bJLdTyH7>6ToZq3zG*&>vhWV zfWkwI79Y&x{ug8S0Z;YY{}23QWbctAoH9y7ky$Bwl$nqQ8OO+887Z?eB9YmU5=F`? zDI&XNm9hyLC96Uu{a=T^_kI6<|Ns4X{J#%R-*c{WeXh^-xvuwho#X8sSqV@2&aB1X zS(xXI>&_Z|adwB|IWy`Cw)zz2ivgsQLwZ@SErwKP3%}2-*>YL-qlv7}0X)TC7iHkf z3sA#rAj5lx@>Jn(zgTIVYWQfmoA28qs{s3)N3(tAWI&O5rBIpSdcH4sxfMp+ZOw0N z73y&%ApTsZ)`a}ygAbh>_sCq9Nj<-V+CFTDNN`qaWy9;u8)-R89ZX!PYZ!97XigEl zm-!m!wRWGVIbk|EXZ!1}NY}Y7?YmE{Q@v`vB}vx$tLk;SOg_&8-}<$WZNJ{6+R+_s zK#EDC-YAx(+UIPTO?kZ%e)UKj?S^-n#GBbEQ|{}5B`2sw^FK0WSPO_!s|p46XC9WL zIk`3Dsa2)HuNTo@p4gS~S}-oqW$G#9>lhi*#6OLVba?J+7{FP4>nP2W#Tf~kxfe+* zdbC=+Kd?kxFFr)=?%9BIuu#o%Qrik>Exo|XIYTg(ZG1g-_hyoj)_c3w+hLho>Gqei zlch2)q-+~8cJ5Qm{Wz=LFCR=h>wM_$;RjwUCe#Njf*a{*PVv1Q);-0Zcc@{!{YK*G zaqedu@rpS~)75V5(Crvv0BeB9!H?Ny3(iYlS>YfUf{$j;L9>w>9vmTsWR zx!QlwuI8LvRkC%*jmneK6)o8=JN)#AV}6!92yZ*}Oh<_CT5s|?CA%r+EA0n8_sLZ$ z+tIvbm33}Eca=5J`RAOuDD#y-y@$>dB54P;c61bNxG6pQ*6NlChq4A6W7DStV!@9z za*q|Clh3c-cl(1+p_G3HEyFirYVxkbhMrei6`_ zJgm&+k+FZ#SvinK!=NTEm`i21xAJZ0;URhQTCa_rqP6|0wgJMAp4{GlZFTNlee%71 z)b1^7Ln2-1IF&cdb06=mvQA%Z%sAF;^KkfB?TjLCVKAfH^YjT}3)aAm{ya+Nc}>FK z1*W+=MW5Sb7)k`m^#_KrWimfD?5n&OPuQ)nB&ojC*lx+6aB=>+Z=L35`@ryx`a+Q^ zbT=8}?w+A#JjCFBfS~$Dm45m{+nnx!Y^IfkJe)75A})Pr|9RiyXU-Oyz`oU`G>6hn zzmHbF`MF?Z$>j0wgER5Ch*99w)G@M=S%j|pBGq~8qndjv+MQaiY@g96nrP)EH*C#e zORwAZi#>jeZt!tMo;&g-*-lp2x<_f1e*2opPJOuIF~pA_zsbyY3prE5bE@YqRww0) z?4}9SobV=pjHUl|{&IfPk=5Tn$I*WJuwQcj+w)h`l*aaoI+)0=Yxf@O-(8@>NT*}=25~FvduAd7g zYNkdmp8PKC6*Bs3l^&W1 zusuF!b(L&q>d<#0H1O?q3H%Ij|3Ctj9UZ}TK263`J>t6KS?!hhG?O+*Mk*oj%Xbc=c0jFN^Y zi>ata?!hK}V8|=>i`h@-uDitsu_hb$-`K<(ex6BHpW*PvV_v7n_d4@Eq}`-C{QG7K z-_$MZPwie&BWFcB{2r#(?0CR3C0Ob%9`niXtIVP?b@0}Z3L)+c{?8363y+mp$5fu~ zm}fXoYq&N{?M+toWp?4hyRW_fRLw?@Jbf$W-I08CuxjyB+N$U$*>08Pp2i-NH=MhJ z>Q|P{4Ct)!`M5^tQTFW@B{G(b!$n@vQQtc*X1_V`^of$$m~niyIqzn}GnTtFm~Fo| zHdQLgiw#aVPCxowx2juF{M-H5+@!z`SF7fIE?EW}kMH*G_w@YI{&_*%C>aPPex z_SxLOSUL-vGE-?6>eCtYox2}1J_)XVF5+rBS{MJU{+`F+?!Z)9k=xkQss-4;rS=6@ zebvdc(^ndLsxTUGnKyd38{dP0iTrQjzib}b4(LmK&Nu4}=$6{a>5E^!_WC=v@7yEk zE6$bWWwdfaRg~pH-sR)x7lQ2bt2TF+l4wr4>4*efKEKn>rN%UtO!+64Dp*_hL z{VJL|^Pjk=t~@pI)ZyKC(-32JS;0Sn`v<9ZGxv9rwuEnW8&wLfu~P0!l<)MC&KCQ% zd38aPCiS9?K5e7q#c}5HqzcRO%^qq@QP0i=z3uhnr_y{pMuF|{4Uwq^BkjL{A zgIX)QboqT>i60x-Cs&kRCYHYQ3-^!EG0PWxD^82Bv;DMq>fLx@hU|6v;<;Dlo7hu* zlNSYcAKrVq#P6N_%$e;^FEz2wuUdR(_qdNN@TWk_rEd4(ap?f{z56_4&stnda2D99 zR88}Qee!WY^@EuqJwDmy5+i{x2$YfTy_G@K5yx(lP2Fw2yKU-y)g0o(vNOTWH~adH zpQ*ulQfoD=6Xo;qyXc*fyLX1J)7E{ zNNU?n*X^qPWV?H9J3qD0&0iK)Ln~r>ZW~!X$*S3)*l;&vFGuy=48b>a#TuRJ&2lv( zxpSSZ3QF=-U#a?%%7>H2m2QXiTDTM^-`LT5*HCHG)bsv^z2S9t^@kZ+(h|9ZobQ&= zY?9hhaBTb)be|axC115(hWm_DT%)(tc%*N0 zt8z=MIk-)(|Me>UUGa~m>^Su5e)p!%`Nr;wlRws!!8o2qY{jWIYcly*yAS0LUQ~Z3 z5-mO$bnZ{d!$ZN6AxC%IjpgWUSo>aerQY?V&qOJ$ALoTX^sTpID-Nc}&f&AK|K&rr z9R;LBJ#K=az#pgo?;o;txAO5KOS-$-|35xk+kgWb7-;Z4?X1OJf}kM`bq{E8CUtQo zcjG%pN(X0RH*Rw$;choKZsVb(F5JeWD=+s_?k0EfMYo_1Mvu*7$%57~jQnsh9g|`*LgO1{bCN z-*!-w(s}gfpDS7uJ4m^93?r^3arwNRoXI`QhoEmfDY(6K?TMWP{;oq(JH}_Zlbn~j zc`i|gj?&@ePD(c@&GvAmbh2G(`&$Qx;~{({c4DT8)K{p+o49n;(iPzlN@o)Ojv;!B zZcx6Knk9lN&<>@COQXb|(1H3y4yEy>Zg+Agv=g}G)c4Dmw)7oMQM!cq!FLvXqCc^h z(l^9OJX)qqG0HiUD8s@{nLFHG4uCG+#N}C_)IsE++CP=Mx&Il5rKbMr66HWN(#>@V zm*0g8Ts}39V!zPGo!WtG=T7QkOYLI4^q$fb+N8|y(&?7Fk=VmW8SUlEp`3TQGs`z9 zhfwNMW?baPwWGMCKi>QGjqgQvZY2l!zf+01U3#DIbP)5iP`% zU%cqN!7ckM>Dsu@({+!ZoZ}igxM^t5VRuEly^s43v}V_Q%b7nv=M>lPvS*79Cy&mH zc$Kd&eshUVpZk5XaD_>Hd6D0~8$lt?y#eEQuj@443;N6%MAczvny_UwZd}sDDUdyW zkA0$KRBn9!)X1*%P~AT^XDYRmOoB$Y$GxHVT9MRBmY<}FTQGj^x}$yQjJfd00rR}C z%*j-aHwR)g8a8TAh&#C)hQHk=yn55UwW)^Sun%x|3649qiR}v|wmR?9X zGEihH{?RFw?LbNLn-fzS7s6_USA9yEnEkZYE-&Wo%99?cH|v<2YW-K*THLX@q493R z)v)7MF*bX8?NjJg8g~uG^_KEw6{Se9_6d(&|M{Ht8ugFSM>2WqO}8Ijzk+>Kr0uD7 zh?ep|Z=(2tAIWDvMy=Z#cthrll+n1#=|J;%?c*l9tv0Xx%pI@(uF;m2>x7DQ{pFf9 zH!aqg?lVpKEu9*we&o{TwMo~e<5)x1Y|)P^{;}Z%DP8ZPuJIqWT^mjbCwfnon};mS z=4(&i;MzWYJLT?(I-}5@*L0b=ewxKk*H1s%vYus9pI}1_0V>7Xzlmi-7-9C5>*hr|6J^SorNu0(;zZyh$C-1v`bzzg`3I>a7e^eKg za}3W48M9eyT==cNpgMJMo1TPr-)RSn%3t&mcLWdZ4ZOo5O6?N3Af&ROzV4c;>4drl zY10^YlaSbH5vAGIKtV(5!ZWiRYXu{Pb!3iujx>6)$A@UfS#}In*4;jRR)pKP^l+T( z3-QYvbJX9R39oh@*D85aX7Yqa=LWA6HTPj_^{#-U7q^>_?sZn%^xoy3%8k*q%|rXd z-8?EyT%PMXTeWx}J1Fphi}v;6h5S41v+`eQxLuw&EP5UZDP{}lD}P}pI{y6Ovs51PSg)|^`>aML^J zfzy=+?Tna1q{B1%%8&QA<5K`C+RQtY4>W|Oh*xe+$J8a+vLO+*;Stg zkN0k-lL`?wt+;%i@TAKcyJN@MAV(^@x{8XnL)Auuq}M-rDu!xC#P*ROodkVfI(N+~ z60O~*wLP2-68%N1SBSC{?phgg_uSaPK20i#bGNL6n7CMEow%i#7$T|Ocd`(vbhX8m z3Z%(M)*DwCB*m%}NSysL^W}myWj%}8Pa-{(NB0(#mr{l62kw#PVmPY&`yC<8Fq`p2 zfKgO|!GQg<3SDR)ixd|F)rHF^?}du0jvTh$9QSft%j*hi&()tgb!|dkojqUjh?-in z!OPAjq)SqkK2E^Soe51LV)t1?|yo_x~ zVE$dT14)VW+3kHuu;VRusnrZr2{s1>8-l)AE;{atTdnZZnBJ4w&qaWpcA>{IkA{lx zf^i*(yIjvf&$-0kos8#>O%NWhjXg*YX=y+iv8N+xHWW_qgh3I7){I8Rh&aaO8BF& z*$b1aI5Y1Y{q5AP`m4T8lQyL7iEXuFvQ_-40y5m}I#1 zQNip5%Uo&8{{91Mlg;#8Mj|_0?+q8zt6O}oe0}DWugMdU`TQ&nX?6C9TYH96t`E1D zvG$H|xJutB8u`GU%JOmr`La&`VLwzOr&UB9QY5iuC`w|QZ098v zj24$}`+1nvv08NT>84-f_20~c?$>|VJ<(*wA}va*RAT%lR(dF~kC$UgPe-1!hg?{l z#W577UH(x;H{-UXhl3xFodfk+(<9=Sb)%H+&JN5puS}cV(f#l{!CT}hm}R;@vadXRlAWA=j=^i$WQMslqc&D zSajOYv-X2x=C%vl)=GG=dWr|Hpua;1Mhhr!me6nd;dR2IsvP=`tJ{pD& zsss-Kf%tCf5z@4Ahx@_G!-_HODtC2{JZ!vap^%Zgo#SFgMojFW+E?Y5--%Y5T@HP1 zo zKmN3KJes~mRy#sP_wvC+`W;qA!OC*9Ql52nqGl{y>o^vr?ABy5&o_TlCV2~`=58OI z&%1phZ8BGcac9@+>o9i8sq}4>C@5PF&Cb zx}Qs`^TOnVhT!YZ19wCp3oayAUEifmw^==3gkybIcoctd+^ZuO+~ewPpNQ$7Q04!2 zOG`V&-J31majiAS*F*EqH;PX;=G2Hf@fWjKz2UVB?qFo-*pfdUdW&3@xy$hVCN`(_ zY(1Li<_zVit{SH1e>j*Rd9~tY=qm&E9xL{r7S20T-Vvu8%@h7HroCITC9OAKdUvlF1CuhTyLz<7X{wxg)zMu} zYRSFYVLRL#H)X`BE$B991@0VR8}fQglc3a8p|G-9(!FDK3F++-L-~<_zH|lgbB{ko z+N$b^xLxhETdd|R;r=qoDMsosni}J@3;M8aQn{pP#U|>tC1Q_QZhjF^Sz8}AwCf6) zrr*XaS!D59!ONZ=>OxW=_nCXi76}CnDQ{!VSX3>Jixk-pzKoS;*g`iD>B-T`-!se? zKjaj9vB62~?eoNAjgtE#H71Y!;OO%d&DeMJY@^sGW%pwLjJ|D_p3c?1@*|OlIA-Wi z7)gE;tZ!;J>-_P7VT81>e_U>&$jPcI-}jK01x>_IXt8y|)@}1^uFyB0G3jjMb@Ug> zPbyZQ^csqG6}1?B;ne%_mQUolf@?`3y~Csa)Y%n{A1`~KiaB;^^u^0rukx1#en}D4 zK1Uqn`F0LZRz40rJv|Vk6c{;baj5aNBa5$@OWNh=^Jiq!Peu=Bow^ZT)a}CH`ROOC zmBtxg1#5Q3Pd{~6yl-*k<@Ip&@oloX6uos^pTX--L_Bk-P3_!wp_zGazmj>$FCU*U z3UIWVdG`6`zP?t&;JmI>NhvL#daYKiJUesrV#HS-O>3P@g}m?l;erfOLF+n-JAOrJ z1z4Xxoio%s9mABZ8MQU7V$kaOtZ|DRyG-oEcy+egji(MsG5nZK@z!!D4PM;+@RrP( zuotKPDDu`?@UGLl?XbJ3K_{s`Tl+zJxrxU2k8efgehZyD)meTurCZ=iLGD|X?>kKB z4(lI1yt!*4&Y~hkwEW9coA2xBAH2+YyCqm5(Q$X{-bU7bJHe8xzK#4Nx25Fw<24r=k4e zkWiZ3*qx^oiXF=yuJJh3HG1~4@QJZWKCb+yKfcQI@R*86h{&+dZH#_Tzs>2@#pZ0-c@5ZF*9k=OfunPpf zt`)4HKOkgqfrqR0O}*K~k$5?~=8HYT0S(U6@}de(zRy&X1dtQ>FUh#5ge#&JoCHB3 zN-+NSWSp;+qqn20JtZ9{+p&V6r8N2fk(Z;MTguBVr8p>=E2M6g@)%3mjHMI`@@#+8 zTuUjJN|z`JnWa3^QW7trhmr!Kq&|?E>qVkwIoq~WLdl2xlbfRCPmq8@h2@ma zQX&p5FDI;!TIr#rh znKa5#ltwz2t`V6)N~#bSh_oT49gNjKZT`*jQ96b%${^q>kh(;Ql9K+y-K7*6(pk&- z&!w@V)Lcp&bs-k;uYbBu*)oWJTuu5vlyhD~ANRPKt!> za#{}q^`D6{gak^^jpbw}rMDP-4AfHUk1~vui>37cZ?={)fJ=2K*Y&S#ByLkK3Vp!$ z<;3H^Qjs_u>A|H5qSQfplTwW`Wt~XUqGTzHyEHXRhc72cu{dzxK=#-Q+*+Wd%q~t^HI&$+R6A>|k9e z)?|ylv6!Xc$!YgH{XkXV*V?!uvrEYAA;0&KC+N#Xnx~sxr9S!x$IL!SFd_1D*OU*{}UagNG7S}TK3%GcjBD;r4ruE}>nz4m-c4To0Ql(LP?DvdC{>DWzNJc?yzBx~Jm zq2hiT@(}}6tB$VN$`HX2rF$TPR^CHRol~^sV#_Dto!8fX&3R(~^Y+A@(|=ZFeQuNQ zY5V@EEq88JW^6dwWyhb~A1xy{w8*?I+b-_0N|*=Qt8bl1ZTH~d}{<~Q`*A@!UPI>z|??d4xrR#+>zT1CF7 zsyERmB0m?Tib-bgj()dF6rXZ8<$ZoW;vI+R>0dicWjn4WT<46Kp5A#kCtiU3mb!+V zl+u`Tg5KrG;<1knW~ypxYK5w5Ps%+{jTXL)E{Qz3E^M6%y^i^(e7;HNqcg@2u8&>h zcr^N2c&Flm;Np*r9Mak9`<*4%La76?BMKdd?T8U*L|#wo z$|qeGC+8MSsHKK=Io~}l^(;Kkd7MGkfXlT=y#6*_1O7C(?9Z~D`m^Vq#}#cZ9ILje zkE8!ltEJs_TZ2*iVojdVT7^AA>sba8#jiWI4`{0^t1?%wu&_-0D5?_6bbdxjt&XG` z|0wIMWxb!JCrOg#hm@&p!V#YfrLQi;?+oT?_+(Ya-bTK$%4dVujDMfS`^ex`ugfYD zYSmaLFO6I%qp8&;M6E{QoANg9 zmoj`t>&_Ldzm<0?PTM)gpVmmE&t{*9!Aa7`_4$eC`IJZ#?T?>aZDG@9lT%*c)YuNjt!p{44vE1dWP$^U+B!Ey9+A z_OzhU`YtQ>KQGziY0b{eo&Of%r(!JTuduaYpS#YF?KccpR&FSf4J3t3?WBt0$=dAj zB`2z7L9m;8bu|sOmUh-<>OQSlUl(o~;V)wBt>Wg#?i^rm9TuIhGyL)R$Y(y8u)BhjYqX=!SMRpE3@KA6y-L zJzBZ?v_RbbXF=4C^dTj`zwA+-sVobkYhfE$VZC-I|7VrPghG88Y85Kw+Qfi3o64pE z%{>wHbF~MVx#(_)RA_z+Bjr~K4zocEcAqQD)>>@@AyO?5~<%N zTVJ`^PnR()XRppy(xH!z=etYNV{BZv zI#hW?dHbe@fG+m4qx6}Zys5X3Uim`r^qq$K;i}CM67;_w1-)TsXucGk!qUHr1vf|i zPAk$l&wFX_A<=CsIk&Co`3{8#G%Ef5>CA6xW}7Cz)3&l56n!P~t3{0`tT^AK=<1Ky z6dDbuI0Kh98N15JtDgg?sRUMSU*#TPmv~M2X}*cqd8+mLvtx|3H9uplgXcW1T~iJS zy=_M~z9nmv(e_GS+7^~6>E0G@Z4vix(Nx^0Lar(AdUkpT&G|kDrI7IU9RFyl=|TSh zYL7F%wDX3AKD#t4XMb4;RyDhN3_1>XLF^~^pL$prQTh9#NnjQEnZq$ z_q%3Ht-(aY7NfMX54w%lH69AHh<+MRmZ*p{8ltN^VX&!TceD0NBjM7`{2Mj~{5<7; zM7oEG%T#TH_m9Y86PDJ4mxMS*-xf&DWYo;wtk}3B(kyLM=8eJQ5U#`Yp5f!&LWi;< zY!1>G9lDVqmD|JA8Z}N*>DeJsDmMYV46ng6u2S=u_bcWj-?p^R z7Tz&2ST|Z0*(mzJdj5;)Mei{s{RKyMj=3qW0BY(RE%Er5Rc^K`nw8{}r_7{(MGGmP zCXTZCGsP3V+v~p(($QbD@}g_#PT1&O>%DgO+;u>D9*fm2{$l2P^OI-<@b1a;rhHYrE;F|Di(1 zNY0cNs~v?a99b9N--@z}rOxL(+D#XXcVMVrl{o%_CaFpB#gw91J2zc`;=sG<$45@n zm(s~;bU1zst)yLfdHT(pQStddbjP)H*66Zy(tIE-*0Q}RGg_OjI+r6rPkWg>QQz|1 zqgeOY#3GIDnpagVm-ORQGio--`5Q^T=*((1rQ`XUVy>XQp-jw1VrVLq?31nh`(d92j>>zs%d zDMdJx+{f&-``jB(e zVo+NtNo#6xN-TVkMyk6`Qs#F@>KZ-w*b)3ekxMb`3D)Z+KUCBx+G#}7sr;J4Tf_F) zd#LxXF;#xI3A9PVEZ>$;xgNu=&}V=GoGuG>g*NuHpje6 z6PZ{yH=@p^VyIZ6I?E8Vou7Tgbn58wIF``X(lal_O`M*$Bpe=maMj(&V5iUB2|usZ zdtGk}YH^mF=waA7VQ@0BHgKnBwT0brTh+Q#HErd!7M&VT9`thgZ@gFQcl?=DKebs= zNsn>-Z0_V2rDrZ%6;;2V2{fTK(5ZPkn`^Z5_PNoQ#wD@8P01rKwg+mg+PB78c4v;^ z^TQnln^kMmm_Kp`CT7&{>>PGKxc!p-{+#lr!M6kLJg>6vH-Fe!=fV3vXYbP_z37oU zAs;GI%u+iF{6(|wxw5%E=qjA38O$hrAO7{)45ycz=7C#-Nee5A-z$-#;>$xTHqX~5 za7u7|`?@mZb~F80=C(#Q&fBgQ>m&~cHyrP0+(}D)WS>1(D(SKr)1_uRd#*e>i_e8? zHhT}bdha`PdFIZAE#e_{lTo_|o=5y?dB|8NIH_;!ewccb0kfPle{4e->3)R!hgF|; z+p#P1=nS(~x$KobyGr7?$jOdq`pK{E$(gdYz3Hykir)9K>a2~7SH3$O_WLHo^Q5SK zH>xHJ4@*igmULZeGIV?>Au?^w@Z-e?|HG42jla*_WMwfgNjk;j?D_VE=AGwktDax* zc^PZnC@4zr+phS#$Z_&qKzMlIr~udg9+&r>e47pxJMGbZ)n>n1dm_o3W5`4%&ctMb z@3~+4cF$hf_h~|g>>@=)cd5^xFG~(m3BRyo)#q2zHa`5NUsEh=y@sUZEMtWtyy3ARA0Y$A({x)yUzKER8{KidlCs8VIwZU!9RQ3g};mU4@=&NHh-hE9a!t86G{?=GCbmx)mj>gT0g`V{8=i>HSs~|oc zM|O&?<9sbHUYna~xP{~O$3NDUfq@3epWaZiDmoha>i1NSg&OXoS<13d$_QdZ&|**X zGg^Xzji93>YTSH0ZOC4dR-RrqvK`b&$xst4OOI2bJ{7Ts*sMrJBr_}>PAMS#C~vp= z`yVU*F9=&e9W1~d@b7sLmCy~pK>)`|fIJw0J)DGlPzB8}1+>%z!4DF!0}R0qLg5-b zhS$&spMVPQ-C7TduosSiH=Kj3a2IN!3ub^5V<81QVK3|l4~T?oa1Sb>83uvCPu`p$ z1hSw5hrt&7AqH~cJxl@%9j+CmKnGkQ1TH`p6haM5!B3!~$B+1+0!P3PGNBqi00+i> zI~ap6q(CWjz)D7x!x?x8AApXDAU4AR@Q0f)1mesDVF@u%0W%=ULJ&@n1}|U&gfXE; z;0LMj1o{BMLWqMAoPyiX22AXjcL;=H7za@fg0O;X&;x6b6f}kNP!BX*7=LhqbZ7wv zyo+xSoPhf<0Q@{SA4I_`VCTiV{U8z=fMq4(17e^7{(u4>-U$dr@EsIZp>OaMsQ59? z5CnC=yc%N*N8tk01A!!`47fucw80;cT7!1sK70X51icg7fzKczL=X;;3!h-4FyzAT%Kis(@-8#soazE{p<61n~*s@DRR$s3_tOEPy&5}n=lOG8xh}-3sbOa6G5ngH{6Afz`vOw zOduXwfNBfYHjp6+8esvpNn-uNRcM0Wptu!nK^_c)@HT=t2ubi3c%%@&Z~^LoS{ktd zevk{jz_}gk3qqh2zQTGL#5kltEAYw^ggK-@8}P~z#34wB9^jWpd_gqS0fPcT?1KyN z7Wfn~)^G*7Kx79&I6^#>!xTvDBnTTwfi~dYh5Zd8p&EXJyb|IX9>6Tf?z0>~<34j~%`fKLUn4pC4GjH(2o53%qHSkKq|BYuR0!wNT>w{4T8{x zi|`%pbAES%@*+olAsDU;0G~~2)7^~o9NB_uvhD20CZ#?XU$7g9{|WQ>cYk z@D}=E6sF(@5H2_d^uP|HAr0<8A-sh5Fa>n3*b~4AY#|h`K{ZSR;fCu488`wSa0QxS z21xFBUIat%fpAEIJ`nRD2sLnp1b7W&z~G5B3CAG_BH$|Afg)&tX6S=qn1%(Q_rg94 zVju-Na1t&astmkpa3eM2S>mSLLmWqVS_LF4K9!Z9YFF!96>0QLKiUlqc7kKH=qU< zVRrz=816t7biof;eG>hKvrrDdKq3%p2QEM+ltBydp2Bql2{wTu>;qG9053QRk&p^m zPy|n*7Mh_K#$gfYPh(#KAy9yWa1zeJedq-GAe3y)wFNU?|mH~>LV0E57A0ec|q0ec99OK=xz;WhNZH{giF z+J&v41eV|jk#H4m!9ysACg_1*Abb(8*}xp^-~_}&K2*RfmObifo)B~gC0jn^lz9(IB`xIidefU8gl4e%CbVP!J<2MTZy{2&P)LM!}$ zEh!ieI0VPR56(drJb^dx3s$BgKEVZ|AP3$7bsE}-{Xhm!NP(x&0_`vWpI`x4E+bAr z0_4CDoWUDHAQEoEJ$MAqpcOh{7^dMTh+RQ!KswaHPY}L}{zEv#Ks|hfpTKnu>ktgU z9}?jU{05G6yhZ{8$b^Sb1uZZPGw=&|uH&^GD1$LrfjziGAVfnZJcep$fnFE^x(vL2 zfVHp%_JA2!f*XWG8r+9^=z;7o8+-$*Tlm=u*1#rE221dR zYw!fR;2W@Jp&o1ic~FBBa1%O!B^zS|J`e>-a0BY#3vk{>41pmyKs@BZFyKA6gg7|B zLl_6a9Lz6-Ln_>c68H#nAe@Um9o!%Uis2bF!ytTy1z@?0wE&_Z4VrKOEWroPz(u$P z51|rXLI->Rfjq2X*berP2~EI%53f}q3hIICK3)fcGvvcd=!bdW%SQ}>9(X_uT!UhG z1${6Bi?FT$@d8J{5xgN5u0R1ig$8JW0hoprg?KK8)gTVLzyK`40sJ5Y65u)%K^eS) zZukh_VG)>%FixNcmT(s0p$f)e9)ydr{=fj-AsOz#Yj_WnK>q;!0dbH8bua`+I1T6E z4wS=dXoqQFdWhpd6qG;%Ou+_R;53{A$|u({;U1L13+RPkz*2&B3!6X#48Q?=;1XoO z6KH?|pn8Npf)*IU5paYPa0*f(4=SJ&CSXM=`UR}e7o?uOaB{;!J$cF)-D#MzD&9D>nzz1UCDzw8#SY3{I0Btw` z@sJJUu=Xj&7NQ{ss$c|WVO0gr4Gs_tDUb(?z*C9Whj0LFAs%i*Eery~Gprks1Z_A5 zE^r1e!2@^)BQOnYRfv0#1vM}MCpZD;APMe38N7yG7=mx`8)&Mr9$_tPggu}IhF}5i z5DH0<3HP8FYM~hhfu#ofH3-56kOx)J19PweXYhtV2!kldgI4$o9JSadzznS61jN8C zD24_Yf*Dvg-=?!zOfhE|w?KfwPI^99nN1?FH4-Vh5{Asb4e z9(rI3ege}g?8mScc7YZcfh7b&1SCKK)Iuu^zy$mNme)8IHi9&0fFYQJHMoE;L_rc{ zKt4Q%XV46tFa+bU0PKy}r$82VfdSY-0Gx$*xCMFe0IJ|U3LLkJ$6KH`cpl(I%!W!5PyTJg+5D4*b2OdB@v_d~j!XmJ|K|FyZD1jav1_ua$ zXvl;Tcm-|n0jA+6(7wg%0}umQPyti01V`|Kc*uf#@Cd455`Mz^HoU%r3-A<1U>3OE zVGKY9^x!B2K?;;W9kjzw*zz9n1X^$utic7&!X>x@51Jk0Aru}1KCDH|!-h_b1DJsa1VaK8z*DG&chC=<=I*z!#+3+J`fG5kOPmP9y(wYz5&Arj1>sOde{!CU;szK z3j*OHT!nk^0G>h%Oak)&)*5UAJ+Oe&5CeJe47!0B#Pc`EfHv5I2V8OigR++(^e8qF|cRV-EqOWsUv-61CpE&m~#N+~=e|{sk@CRc;P!TCq zR75*96~RYKMI2Z`h2N)B5smaz1Op=#q0U4_1T#|+PgtmkIaVq{k)4Y0;-Dge;4EB# zRLFowP!G+}2cs|t1Sb{20so zz5&fjDuNyOK^){j0}g-{xI+*`Lpm@qso2<%y}U^K$o>Q?>)$)ZWE)Si_rLGkl3g9i zwz$Z@k2{h5Nv>|*B(jUUw?Dzh_qW(<>9GHJgqy=}ERF`8tqYNw#>v+0Dw95D`)FB$NEzd`MnCe{c9&p(SrO zk}cVp>`f*)dha3l`BklKNw$vmWG`=$n;l8b&DERi>b*rzU6v3MQuQQTIk~$z;xIc$ zXEGWmdo6d*&(X`95D@s^6&$R*NMt{EM|6i^W>)pFaUy$@bSZWJbx+^Qg-r1B{(a2K z8Kw^^JG68GT9dQogG~qy$McE_2t3y z@>!a9J0E9)iwk9rt{y%ZICO4l!Z7#he`jL(`q|k2b>H2}+hGU6&Hb+eZ!0e+l9esa z@_&^sbrQ3r;p*+^?T^WGBRN}n+LJf9Sox7;wNxek=VM+jR?f~FTpV3VGI~poXFDa{<**dI znr@yhBzHGwM;m|A2}d_)$}l0!bPPxu7$kRZM>p617L4rdI<7WuF78WlXYFR|Pq4A+ zAksWtt(^akJf+GBD`!Vr(ta|A5+TFO`%ei5m9oYt%f`_bJ^xp^r@fC0MjgZUPto6L zqr?xv!tzh)aW6MlV&%$z?mD~KSW&vWA;8U*Eb$*lyICJ6+jx_fj^^R{r~2PgFK=8i zv1ZLb#h%OkBsn00$)2SBR<8DB1duM-%8N`{OO&Dhr#lGSr9da>>2)2gJ*_{P)!Vu7M!bBYRufT6tUj zJ4g_O`ebikH&3U3jj_Jl-xFfaD9aKx+(?>~wT=5&fE*mS|IZ#mq68+fdNqocmcJK5 zAERUC?v5B(8bC}V9{jt~mTEIG87z+>WkclQ`FrPoZg`xWe~Xv)z~zq zaFWnd2RGZLEecD{%@Y?BHnG*wNnA%A2w$ zQ!d}d3X2d2uUmKE@5)4xKgk-~^WWuwKG<5hSlOcz2gd? zSJBcSx&Pn8PET*P{K;5?mi7=9&;McWO~0!;u7vNqV$g&pX3xIqwA)GCw&RQ)_tV`E zwsB0bjUNk>C;q~^NEhj%;VO5)hEEz8#Ei{kW@H2iAv7TgAu+7gf@gJq!BP?$NWL7! zNI=KEo`2!}?W%L@o^$R1xZmV`m+@7ds=asZy{k?QyLRnE2arFGq5ALtKA<)Bax`9F zACAOcUj4I|=`t@bsIPy6As`T277Bj6sBWc<9}(Zuw^zZ-PRT`~|gzBnwRq&Ehm!DVDAx@O>OyqI0^UO2pL1N*0RpYn6ou*vs za)|Wovl(C#L_7e@8!|0Ar1o%O01|S)_L|gC9BqrHC{UwBa3lZd(U4zx#aVMIa%y!iznqGp_*`BUs;sKve-D4({cb7( z*S%4(NGOAcysJu-zxkUCpbSI-)*1@vJKxCw6lAaweihX7&u4&&27}ehV^#6m71^td z)`#lq>|XoA3z>+09AZRS9*YFZs};F_{$~TJ8-fDfmv~*p^6~(}q9i2OV|zGa8gh9> zAfgHU%fEax0!s0Ug`fV^L*ZdN(u*%NVYZ%Luz(4$97T}sdypB;L zvV4UZM^xYV+0R@^Rf?4#E2RWhERR+NBEjYLpe(PA(WL@4^;LnFe=hMgd_Va~Mocpv zFOP+JsWdL@;BSWa>Q5d9FA}H-g}*_4sd#pM`mHy*cWOrDOSG~}z#qJ7E9aXazxqQP z`G5S6jG8T{QIai)xb>+GlLeg)#(s_+F%yRxCj#{$Cjn{KEIk5r_HA)!)H6=14pD3O z3Bml)k23OYFj){edXixM!#_L_t3D8o1=Cch2lcc~l&DZokgWB+)n@6w23Pfd54(D7 z%v2|vO}dK;#3JFE<>8epon1p-tpylM z9rL4ej7~vkDoV71;vz90{r70-xhczVZ}>>88dG|AmI2Tpt9^k}dfj`n^m2Q-W8)-- z=?C`K#Iz>+kktCJ%ndPSrVv&dEKIT;@xH=(JCnAbs~v&vrOT_ZLa+d;39hu~3AHAb zrq1%BWF?^cxlqXRqNJfv8>$dalpuzQEPdqxB$8}AnjjIq4Hk78E*?z~2ZbaP|MX88 zUmOu+Whhuvv0Pc~#ax`)oLNSUB)+|{PsM)o&4;Kxu|kn!gY-kQwHCD5hJ43r2=n2UB2ZrERiZzM^tD_R8gTSo1O0 zWPOj*;n_o1`4U%d)6oE>d(f$XQZ~#Gt{1bQo`9Pu%#~gzzj|bnp8nMh++DqZm0JjF;ZX z;l)ceR-`woJQy#%k;99ZSPeduk>jC|GZ{IY$lt)o;Y4R7epDle2mKL@9BDCAyRc`C zpAPFGjU4GvAJ)i`7WW~H93H%fFmhzZFh&H=GAT2Lu^)JLJLxbU!pQLeG{fJc)n=IV zSOT22J(7_l1@XZ~jue!KGjgP$CAP_8PH|cq9weFz&uL%q%;G5(W-w8x4Ub;wdM46` zrQl@3vk-8ScyuF&6Z=t(98O%b!GCxoM^^NQG;%y5jkHFNv@{;p$dMNL;fx$ERDHB+ z?=Z6(Ib3Ltlb+PwX_nQ(qZv7zRi-fyJlM$b&;*hj`z$X?8WtYL$ngLsoFtNLWO?J$ zu;DOKWHNF*fC~qOBom%>ru6}Ep zDdD4|uskcs)j!l;QHiNOQ(Jl##;bq$<5&KcH`TmX4%e9FKSwfhJwtC=#?tMr9}&;6_=tFhPtV%i#ix5> z@g6{WhW%8`H2dppT&mhKY_PNS4~6I2DLb~g4;0UZ=-l0U*8QpCJ$R4pG4(z)2`3w# zWsHl)L+rA%y_FB#W@j6~9%i5IIZkx(o`Rogqy66`qIcTaCIZ7r#;ta?VbNe`*lTC& z@sD6(ck3?eZadqw@qq2NXOrowG|etE&3-%ETa%SSa+8_utw}?|xm`AU-E5ua0W^|~ zJfbX)9kb!%5oK|ZNV4HMtVwB<2kyGF4I!coO(5e|ci}?U(RPOVAH45=gByho=Ys5X zGIH~Gf0v#Ls|2@ufyXJ>R40I*t#_vB9Z<7JNbW7v5qhQx$+d||xB1RAA*Dlf@4h|W z$VMP9rfd71Y5Y%*`j_1K5X58|4S1YL^K6uaLU3on;4dAB+1I7isRV8m_5*=isPV>WW>8OO=+43?t-$8DWZ@EY=ho<%f0c)z`=v}L7rpG zgx8%m`6n59keju~eL6{ob%c8-q_0w%V>A>QYVC)%rIJ#YM^r!7WEt+iLdL?*Yq;l*!apahf?f&H5r`GJSX& z$;tGQi8!WYGp(mAFdoE-gGiDUua(X{Ihm{ba@6O!x^LXo)zQ4yq?h@9%rcSb$P$T( zQk~w*?BxjY;_`cN&%g#;#Z7U0JGf`yBxE{A61VS#fpr-~8SLtHSe6Vt=&8@et=kDg z(e;>k2!Emik;ye7i96&ri>AX+x8?Ym+QW$ua*Ds$98N8w`n*7{SX)Yn0VjF)qAkJC>M$|4GUB9T$>R@|^j4PMkfv$94pa(3zuSW0 zeqj|`ZWD`B2KShh1U43jqyb)H`qV{L^fGlpU3*kZjqWk&(TF7ZPBRQBz6~pG#kf7i z(p2hEOPbb7I#xL@{5rLh<}FF$xcWjGZjz8`9I?{$G>QEp&S5GNle?#-=>!HkB=?(% zmE^|AMqlsXopQS8SEb9uRG!=!IeLOi^fdh~u^4v+nMvc}rE2m_-%h^L4B%?MCgNz+ z5i2Uw=#b>yeuZ6p>sV>7X=gPt?VuYY{G+1j>5?lVs{>WbqX7vd$!S)YahtoW#A~V3 z7d+jj@mI2dbK(=OWMdmu)p$7Z91j9A)wF=DB4P9XRDys3jRPb(p+E-lg zF8wZu}D*nGN_?&$HP9p+0AZP5o5A Wy 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 JYN`(Z_J6D#U%&tW literal 0 HcmV?d00001 diff --git a/demo/release/output.json b/demo/release/output.json new file mode 100644 index 0000000..8c38fd1 --- /dev/null +++ b/demo/release/output.json @@ -0,0 +1 @@ +[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"demo-release.apk","fullName":"release","baseName":"release"},"path":"demo-release.apk","properties":{}}] \ No newline at end of file diff --git a/demo/src/androidTest/java/com/chengww/demo/ExampleInstrumentedTest.java b/demo/src/androidTest/java/com/chengww/demo/ExampleInstrumentedTest.java new file mode 100644 index 0000000..075989e --- /dev/null +++ b/demo/src/androidTest/java/com/chengww/demo/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.chengww.demo; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.chengww.demo", appContext.getPackageName()); + } +} diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4302c2d --- /dev/null +++ b/demo/src/main/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demo/src/main/java/com/chengww/demo/MyApplication.java b/demo/src/main/java/com/chengww/demo/MyApplication.java new file mode 100644 index 0000000..a9b3a7e --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/MyApplication.java @@ -0,0 +1,30 @@ +package com.chengww.demo; + +import android.app.Application; + +import com.chengww.qingstor_sdk_android.QingstorHelper; +import com.chengww.qingstor_sdk_android.task.Downloader; + +import java.io.File; + +/** + * Created by chengww on 2019/2/27. + */ +public class MyApplication extends Application { + + @Override + public void onCreate() { + super.onCreate(); + + QingstorHelper.getInstance().init(this); + String folder; + File download = getExternalFilesDir("download"); + if (download != null && download.exists()) { + folder = download.getAbsolutePath(); + } else { + download = getFilesDir(); + folder = download.getAbsolutePath(); + } + Downloader.getInstance().setFolder(folder); + } +} diff --git a/demo/src/main/java/com/chengww/demo/activity/BaseActivity.java b/demo/src/main/java/com/chengww/demo/activity/BaseActivity.java new file mode 100644 index 0000000..c4eed53 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/activity/BaseActivity.java @@ -0,0 +1,80 @@ +package com.chengww.demo.activity; + +import android.app.ProgressDialog; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.text.TextUtils; + +import com.chengww.demo.utils.BindContentView; +import com.chengww.demo.utils.BindEventBus; + +import org.greenrobot.eventbus.EventBus; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +public abstract class BaseActivity extends AppCompatActivity { + + private Unbinder bind; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Class clazz = getClass(); + BindContentView bindContentView = clazz.getAnnotation(BindContentView.class); + if (bindContentView != null && bindContentView.value() > 0) { + setContentView(bindContentView.value()); + bind = ButterKnife.bind(this); + } + + if (clazz.isAnnotationPresent(BindEventBus.class)) { + EventBus.getDefault().register(this); + } + + init(); + } + + protected abstract void init(); + + @Override + protected void onDestroy() { + super.onDestroy(); + if (getClass().isAnnotationPresent(BindEventBus.class)) { + EventBus.getDefault().removeAllStickyEvents(); + EventBus.getDefault().unregister(this); + } + bind.unbind(); + } + + private ProgressDialog dialog; + + public void showLoading(int strRes) { + showLoading(getString(strRes)); + } + + public void showLoading(String hint) { + if (null == dialog) { + dialog = new ProgressDialog(this); + dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); + } + + if (!TextUtils.isEmpty(hint)) + dialog.setMessage(hint); + dialog.setCancelable(true); + dialog.show(); + } + + public void dismissLoading() { + if (null != dialog && dialog.isShowing()) + dialog.dismiss(); + } + + @Override + protected void onPause() { + super.onPause(); + dismissLoading(); + } + + + +} diff --git a/demo/src/main/java/com/chengww/demo/activity/BucketListActivity.java b/demo/src/main/java/com/chengww/demo/activity/BucketListActivity.java new file mode 100644 index 0000000..0848a7d --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/activity/BucketListActivity.java @@ -0,0 +1,202 @@ +package com.chengww.demo.activity; + +import android.app.AlertDialog; +import android.content.Intent; +import android.support.v7.app.ActionBar; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import com.chengww.demo.R; +import com.chengww.demo.adapter.BucketListAdapter; +import com.chengww.demo.constants.Constants; +import com.chengww.demo.model.ObjectListEventModel; +import com.chengww.demo.model.MessageEvent; +import com.chengww.demo.utils.BindContentView; +import com.chengww.demo.utils.BindEventBus; +import com.chengww.demo.utils.SharedPreferencesUtils; +import com.chengww.demo.utils.ToastUtils; +import com.chengww.qingstor_sdk_android.QingstorHelper; +import com.chengww.qingstor_sdk_android.exception.TaskException; +import com.qingstor.sdk.config.EnvContext; +import com.qingstor.sdk.request.ResponseCallBack; +import com.qingstor.sdk.service.Bucket; +import com.qingstor.sdk.service.QingStor; +import com.qingstor.sdk.service.Types; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.List; + +import butterknife.BindView; + +@BindEventBus +@BindContentView(R.layout.activity_bucket_list) +public class BucketListActivity extends BaseActivity { + + List buckets; + @BindView(R.id.rv_bucket_list) + RecyclerView rvBucketList; + private BucketListAdapter adapter; + private AlertDialog createBucketDialog; + + @Override + protected void init() { + if (buckets == null) { + ToastUtils.show(this, R.string.parameter_error); + finish(); + return; + } + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setTitle(R.string.bucket_list); + } + + adapter = new BucketListAdapter(R.layout.item_bucket_list, buckets); + TextView emptyView = new TextView(this); + emptyView.setText(R.string.no_bucket_exist); + emptyView.setGravity(Gravity.CENTER); + adapter.setEmptyView(emptyView); + rvBucketList.setLayoutManager(new LinearLayoutManager(this)); + rvBucketList.setAdapter(adapter); + + adapter.setOnItemClickListener((adapter1, view, position) -> { + Types.BucketModel bucketModel = (Types.BucketModel) adapter1.getData().get(position); + // Create a bucket + QingStor qingStor = getQingStor(); + Bucket bucket = qingStor.getBucket(bucketModel.getName(), bucketModel.getLocation()); + + ObjectListEventModel model = new ObjectListEventModel(bucket); + EventBus.getDefault().postSticky(new MessageEvent<>(Constants.LIST_OBJECTS, model)); + startActivity(new Intent(BucketListActivity.this, ObjectListActivity.class)); + }); + } + + @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) + public void onReceiveBuckets(MessageEvent> messageEvent) { + if (buckets == null && messageEvent != null && messageEvent.getCode() == Constants.LIST_BUCKETS) { + buckets = messageEvent.getData(); + } + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_bucket_list, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_add: + showCreateBucketDialog(); + return true; + case R.id.action_refresh: + refresh(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + private void showCreateBucketDialog() { + View view = View + .inflate(this, R.layout.dialog_create_bucket, null); + EditText etZone = view.findViewById(R.id.et_zone); + EditText etBucketName = view.findViewById(R.id.et_bucket_name); + + if (createBucketDialog == null) { + createBucketDialog = new AlertDialog.Builder(this) + .setView(view) + .setPositiveButton(android.R.string.ok, (dialog, which) -> { + boolean inputChecked = true; + String zone = etZone.getText().toString(); + String bucketName = etBucketName.getText().toString(); + + if (TextUtils.isEmpty(zone)) { + ToastUtils.show(BucketListActivity.this, R.string.zone_not_empty); + inputChecked = false; + } else if (TextUtils.isEmpty(bucketName)) { + ToastUtils.show(BucketListActivity.this, R.string.bucket_name_not_empty); + inputChecked = false; + } + + if (inputChecked) { + createBucket(zone, bucketName); + dialog.dismiss(); + } + }) + .setNegativeButton(android.R.string.cancel, (dialog, which) -> {}) + .create(); + } + + createBucketDialog.show(); + + + } + + private void createBucket(String zone, String bucketName) { + showLoading(R.string.brvah_loading); + QingStor qingStor = getQingStor(); + Bucket bucket = qingStor.getBucket(bucketName, zone); + bucket.putAsync(new ResponseCallBack() { + @Override + public void onAPIResponse(Bucket.PutBucketOutput output) { + dismissLoading(); + try { + QingstorHelper.getInstance().handleResponse(output); + refresh(); + } catch (TaskException e) { + ToastUtils.show(BucketListActivity.this, e.getI18nHint()); + } + } + }); + } + + private void refresh() { + showLoading(R.string.brvah_loading); + QingStor qingStor = getQingStor(); + qingStor.listBucketsAsync(null, new ResponseCallBack() { + @Override + public void onAPIResponse(QingStor.ListBucketsOutput output) { + dismissLoading(); + try { + QingstorHelper.getInstance().handleResponse(output); + // Success + List buckets = output.getBuckets(); + adapter.setNewData(buckets); + BucketListActivity.this.buckets = buckets; + } catch (TaskException exception) { + ToastUtils.show(BucketListActivity.this, exception.getI18nHint()); + } + } + }); + } + + private QingStor qingStor; + private QingStor getQingStor() { + if (qingStor == null) { + String accessKey = (String) SharedPreferencesUtils.get( + BucketListActivity.this, Constants.ACCESS_KEY, ""); + String accessSecret = (String) SharedPreferencesUtils.get( + BucketListActivity.this, Constants.ACCESS_SECRET, ""); + EnvContext context = new EnvContext(accessKey, accessSecret); + qingStor = new QingStor(context); + } + + return qingStor; + } + +} diff --git a/demo/src/main/java/com/chengww/demo/activity/DownloadListActivity.java b/demo/src/main/java/com/chengww/demo/activity/DownloadListActivity.java new file mode 100644 index 0000000..1a84c25 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/activity/DownloadListActivity.java @@ -0,0 +1,116 @@ +package com.chengww.demo.activity; + +import android.support.v7.app.ActionBar; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.Gravity; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.widget.TextView; + +import com.chengww.demo.R; +import com.chengww.demo.adapter.DownloadListAdapter; +import com.chengww.demo.utils.BindContentView; +import com.chengww.qingstor_sdk_android.db.Progress; +import com.chengww.qingstor_sdk_android.task.DownloadTask; +import com.chengww.qingstor_sdk_android.task.Downloader; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import butterknife.BindView; + +@BindContentView(R.layout.activity_download_list) +public class DownloadListActivity extends BaseActivity { + + @BindView(R.id.rv_download_list) + RecyclerView rvDownloadList; + @BindView(R.id.tv_download_path) + TextView tvDownloadPath; + private DownloadListAdapter adapter; + + @Override + protected void init() { + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setTitle(R.string.download_list); + } + tvDownloadPath.setText(getString(R.string.download_path) + Downloader.getInstance().getFolder()); + + adapter = new DownloadListAdapter(null); + adapter.setOnItemChildClickListener((adapter, view, position) -> { + DownloadTask task = (DownloadTask) adapter.getData().get(position); + if (view.getId() != R.id.progress || task == null) return; + switch (task.progress.status) { + case Progress.NONE: + case Progress.PAUSE: + case Progress.ERROR: + task.start(); + break; + case Progress.LOADING: + case Progress.WAITING: + task.pause(); + break; + case Progress.FINISH: + break; + } + }); + + notifyList(); + + TextView empty = new TextView(this); + empty.setText(R.string.no_download_task); + empty.setGravity(Gravity.CENTER); + empty.setPadding(0, 40, 0, 40); + adapter.setEmptyView(empty); + + rvDownloadList.setLayoutManager(new LinearLayoutManager(this)); + rvDownloadList.setAdapter(adapter); + + } + + private void notifyList() { + Map taskMap = Downloader.getInstance().getTaskMap(); + Collection values = taskMap.values(); + List tasks; + if (values instanceof List) { + tasks = (List) values; + } else { + tasks = new ArrayList<>(values); + } + adapter.setNewData(tasks); + } + + + @Override + protected void onDestroy() { + super.onDestroy(); + Map taskMap = Downloader.getInstance().getTaskMap(); + for (DownloadTask task : taskMap.values()) { + task.unRegister(task.progress.tag); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_download_list, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_clear: + Downloader.getInstance().removeAll(true); + notifyList(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + +} diff --git a/demo/src/main/java/com/chengww/demo/activity/MainActivity.java b/demo/src/main/java/com/chengww/demo/activity/MainActivity.java new file mode 100644 index 0000000..4638d2a --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/activity/MainActivity.java @@ -0,0 +1,95 @@ +package com.chengww.demo.activity; + +import android.content.Intent; +import android.support.v7.app.ActionBar; +import android.text.TextUtils; +import android.widget.EditText; + +import com.chengww.demo.R; +import com.chengww.demo.constants.Constants; +import com.chengww.demo.model.MessageEvent; +import com.chengww.demo.utils.BindContentView; +import com.chengww.demo.utils.SharedPreferencesUtils; +import com.chengww.demo.utils.ToastUtils; +import com.chengww.qingstor_sdk_android.QingstorHelper; +import com.chengww.qingstor_sdk_android.exception.TaskException; +import com.qingstor.sdk.config.EnvContext; +import com.qingstor.sdk.request.ResponseCallBack; +import com.qingstor.sdk.service.QingStor; +import com.qingstor.sdk.service.Types; + +import org.greenrobot.eventbus.EventBus; + +import java.util.List; + +import butterknife.BindView; +import butterknife.OnClick; + +@BindContentView(R.layout.activity_main) +public class MainActivity extends BaseActivity implements ResponseCallBack { + + @BindView(R.id.et_access_key) + EditText etAccessKey; + @BindView(R.id.et_access_secret) + EditText etAccessSecret; + + @Override + protected void init() { + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setTitle(R.string.login); + } + + String accessKey = (String) + SharedPreferencesUtils.get(this, Constants.ACCESS_KEY, ""); + String accessSecret = (String) + SharedPreferencesUtils.get(this, Constants.ACCESS_SECRET, ""); + + etAccessKey.setText(accessKey); + etAccessSecret.setText(accessSecret); + } + + + @OnClick(R.id.btn_list_buckets) + void listBuckets() { + String accessKey = etAccessKey.getText().toString(); + String accessSecret = etAccessSecret.getText().toString(); + boolean accessChecked = true; + if (TextUtils.isEmpty(accessKey)) { + ToastUtils.show(this, R.string.access_key_not_empty); + accessChecked = false; + } else if (TextUtils.isEmpty(accessSecret)) { + ToastUtils.show(this, R.string.access_secret_not_empty); + accessChecked = false; + } + + if (accessChecked) { + showLoading(R.string.brvah_loading); + EnvContext context = new EnvContext(accessKey, accessSecret); + QingStor qingStor = new QingStor(context); + qingStor.listBucketsAsync(null, this); + } + } + + @Override + public void onAPIResponse(QingStor.ListBucketsOutput output) { + dismissLoading(); + try { + QingstorHelper.getInstance().handleResponse(output); + // Success + List buckets = output.getBuckets(); + + // Keep access in the storage + SharedPreferencesUtils.put(this, Constants.ACCESS_KEY, etAccessKey.getText().toString()); + SharedPreferencesUtils.put(this, Constants.ACCESS_SECRET, etAccessSecret.getText().toString()); + // Show buckets in bucket list activity + EventBus.getDefault().postSticky(new MessageEvent<>(Constants.LIST_BUCKETS, buckets)); + Intent intent = new Intent(this, BucketListActivity.class); + startActivity(intent); + } catch (TaskException exception) { + ToastUtils.show(this, exception.getI18nHint()); + } + } + + +} diff --git a/demo/src/main/java/com/chengww/demo/activity/ObjectListActivity.java b/demo/src/main/java/com/chengww/demo/activity/ObjectListActivity.java new file mode 100644 index 0000000..ef671f0 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/activity/ObjectListActivity.java @@ -0,0 +1,235 @@ +package com.chengww.demo.activity; + +import android.content.Intent; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chengww.demo.R; +import com.chengww.demo.adapter.ObjectListAdapter; +import com.chengww.demo.constants.Constants; +import com.chengww.demo.model.ListObjectsModel; +import com.chengww.demo.model.MessageEvent; +import com.chengww.demo.model.ObjectListEventModel; +import com.chengww.demo.utils.BindContentView; +import com.chengww.demo.utils.BindEventBus; +import com.chengww.demo.utils.ToastUtils; +import com.chengww.qingstor_sdk_android.QingstorHelper; +import com.chengww.qingstor_sdk_android.exception.TaskException; +import com.chengww.qingstor_sdk_android.task.DownloadTask; +import com.chengww.qingstor_sdk_android.task.Downloader; +import com.qingstor.sdk.request.ResponseCallBack; +import com.qingstor.sdk.service.Bucket; +import com.qingstor.sdk.service.Types; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +@BindEventBus +@BindContentView(R.layout.activity_object_list) +public class ObjectListActivity extends BaseActivity { + + @BindView(R.id.rv_object_list) + RecyclerView rvObjectList; + @BindView(R.id.sr_object) + SwipeRefreshLayout srObject; + private Bucket bucket; + private String prefix, marker; + private ObjectListAdapter adapter; + private ObjectListEventModel model; + + private void listObject(boolean isLoadMore) { + Bucket.ListObjectsInput listObjectsInput = new Bucket.ListObjectsInput(); + listObjectsInput.setLimit(100); + listObjectsInput.setDelimiter("/"); + listObjectsInput.setPrefix(prefix); + if (isLoadMore) { + listObjectsInput.setMarker(marker); + } + bucket.listObjectsAsync(listObjectsInput, new ResponseCallBack() { + @Override + public void onAPIResponse(Bucket.ListObjectsOutput output) { + srObject.setRefreshing(false); + try { + QingstorHelper.getInstance().handleResponse(output); + marker = output.getNextMarker(); + prefix = output.getPrefix(); + Boolean hasMoreBoolean = output.getHasMore(); + boolean hasMore = hasMoreBoolean != null && hasMoreBoolean; + List objectModels = new ArrayList<>(); + + // Folders + List commonPrefixes = output.getCommonPrefixes(); + for (String folder : commonPrefixes) { + objectModels.add(new ListObjectsModel(folder)); + } + + // Files + List keys = output.getKeys(); + for (Types.KeyModel keyModel : keys) { + objectModels.add(new ListObjectsModel(keyModel)); + } + + if (isLoadMore) + adapter.addData(objectModels); + else + adapter.setNewData(objectModels); + + if (!hasMore) { + adapter.loadMoreEnd(); + } else if (isLoadMore) { + adapter.loadMoreComplete(); + } + + } catch (TaskException e) { + ToastUtils.show(ObjectListActivity.this, e.getI18nHint()); + if (isLoadMore) adapter.loadMoreFail(); + } + + } + }); + } + + @Override + protected void init() { + if (model == null) { + ToastUtils.show(this, R.string.parameter_error); + finish(); + return; + } + + bucket = model.getBucket(); + prefix = model.getPrefix(); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + // Title name + if (TextUtils.isEmpty(prefix) || "/".equals(prefix)) { + // Bucket Root + actionBar.setTitle(bucket.getBucketName()); + } else { + actionBar.setTitle(prefix); + } + } + + srObject.setOnRefreshListener(() -> listObject(false)); + + adapter = new ObjectListAdapter(R.layout.item_object_list, null); + TextView emptyView = new TextView(this); + emptyView.setText(R.string.no_file_exits); + emptyView.setGravity(Gravity.CENTER); + adapter.setEmptyView(emptyView); + rvObjectList.setLayoutManager(new LinearLayoutManager(this)); + rvObjectList.setAdapter(adapter); + + adapter.setEnableLoadMore(true); + adapter.setOnLoadMoreListener(() -> listObject(true), rvObjectList); + adapter.setOnItemClickListener((adapter, view, position) -> { + ListObjectsModel objectModel = (ListObjectsModel) adapter.getData().get(position); + Types.KeyModel file = objectModel.getFile(); + if (file == null) { + // Click The Folder + ObjectListEventModel model = new ObjectListEventModel(bucket); + model.setPrefix(objectModel.getFolder()); + EventBus.getDefault().postSticky(new MessageEvent<>(Constants.LIST_OBJECTS, model)); + startActivity(new Intent(this, ObjectListActivity.class)); + } else { + // Click The File + if (Downloader.getInstance().getTaskMap().containsKey(file.getKey() + file.getEtag())) { + ToastUtils.show(this, R.string.download_task_exist); + } else { + Downloader.request(file.getKey() + file.getEtag(), bucket, file.getKey()) + .save().start(); + ToastUtils.show(this, R.string.download_task_added); + } + + } + + }); + + adapter.setOnItemChildClickListener(this::showDeleteConfirmDialog); + + srObject.setRefreshing(true); + listObject(false); + } + + private void showDeleteConfirmDialog(BaseQuickAdapter adapter, View view, int position) { + if (view.getId() != R.id.iv_delete) return; + new AlertDialog.Builder(this) + .setTitle(R.string.sure_to_delete) + .setCancelable(true) + .setPositiveButton(android.R.string.ok, (dialog, which) -> deleteObject(adapter, position)) + .setNegativeButton(android.R.string.cancel, null) + .show(); + + } + + private void deleteObject(BaseQuickAdapter adapter, int position) { + showLoading(R.string.brvah_loading); + ListObjectsModel objectModel = (ListObjectsModel) adapter.getData().get(position); + Types.KeyModel file = objectModel.getFile(); + DownloadTask downloadTask = Downloader.getInstance().getTaskMap().get(file.getEtag()); + if (downloadTask != null) { + downloadTask.remove(true); + } + bucket.deleteObjectAsync(file.getKey(), new ResponseCallBack() { + @Override + public void onAPIResponse(Bucket.DeleteObjectOutput output) { + dismissLoading(); + try { + QingstorHelper.getInstance().handleResponse(output); + ToastUtils.show(ObjectListActivity.this, R.string.delete_successful); + adapter.remove(position); + } catch (TaskException e) { + ToastUtils.show(ObjectListActivity.this, e.getI18nHint()); + } + } + }); + } + + @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) + public void onReceiveData(MessageEvent messageEvent) { + if (model == null && messageEvent != null && messageEvent.getCode() == Constants.LIST_OBJECTS) { + model = messageEvent.getData(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_object_list, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_upload: + EventBus.getDefault().postSticky(new MessageEvent<>(Constants.UPLOAD_LIST, model)); + startActivity(new Intent(this, UploadListActivity.class)); + return true; + case R.id.action_download: + startActivity(new Intent(this, DownloadListActivity.class)); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + +} diff --git a/demo/src/main/java/com/chengww/demo/activity/UploadDetailActivity.java b/demo/src/main/java/com/chengww/demo/activity/UploadDetailActivity.java new file mode 100644 index 0000000..10d8fe2 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/activity/UploadDetailActivity.java @@ -0,0 +1,97 @@ +package com.chengww.demo.activity; + +import android.support.v7.app.ActionBar; +import android.text.TextUtils; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import com.chengww.demo.R; +import com.chengww.demo.constants.Constants; +import com.chengww.demo.model.MessageEvent; +import com.chengww.demo.model.ObjectListEventModel; +import com.chengww.demo.utils.BindContentView; +import com.chengww.demo.utils.BindEventBus; +import com.chengww.demo.utils.ToastUtils; +import com.chengww.qingstor_sdk_android.task.Uploader; +import com.qingstor.sdk.service.Bucket; + +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.io.File; + +import butterknife.BindView; + +@BindEventBus +@BindContentView(R.layout.activity_upload_detail) +public class UploadDetailActivity extends BaseActivity { + + @BindView(R.id.tv_title) + TextView tvTitle; + @BindView(R.id.tv_content) + TextView tvContent; + @BindView(R.id.et_object_key) + EditText etObjectKey; + @BindView(R.id.tv_bucket_info) + TextView tvBucketInfo; + @BindView(R.id.btn_ok) + Button btnOk; + + private ObjectListEventModel model; + private File file; + private Bucket bucket; + + @Override + protected void init() { + if (model == null) { + ToastUtils.show(this, R.string.parameter_error); + finish(); + return; + } + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setTitle(R.string.upload_to); + } + + bucket = model.getBucket(); + String bucketInfo = "Zone: " + bucket.getZone() + "\nBucketName: " + bucket.getBucketName(); + tvBucketInfo.setText(bucketInfo); + + file = model.getFile(); + String prefix = model.getPrefix(); + if (prefix == null) prefix = ""; + + etObjectKey.setText(prefix + file.getName()); + + tvTitle.setText(file.getName()); + tvContent.setText(file.getAbsolutePath()); + + btnOk.setOnClickListener(v -> { + boolean isPassed = true; + String objectKey = etObjectKey.getText().toString(); + if (TextUtils.isEmpty(objectKey) || objectKey.endsWith("/")) { + ToastUtils.show(v.getContext(), R.string.object_key_not_empty); + isPassed = false; + } + + if (isPassed) { + // Upload tag named with time millis, can upload a same file multiple times + Uploader.request(file.getAbsolutePath() + "_" + System.currentTimeMillis(), + bucket, objectKey, file.getAbsolutePath()) + .save().start(); + setResult(RESULT_OK); + finish(); + } + }); + + } + + @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) + public void onReceiveData(MessageEvent messageEvent) { + if (model == null&& messageEvent != null && messageEvent.getCode() == Constants.UPLOAD_DETAIL) { + model = messageEvent.getData(); + } + } +} diff --git a/demo/src/main/java/com/chengww/demo/activity/UploadListActivity.java b/demo/src/main/java/com/chengww/demo/activity/UploadListActivity.java new file mode 100644 index 0000000..b14ee9e --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/activity/UploadListActivity.java @@ -0,0 +1,266 @@ +package com.chengww.demo.activity; + +import android.Manifest; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.support.v7.app.ActionBar; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.Gravity; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.widget.TextView; + +import com.chengww.demo.R; +import com.chengww.demo.adapter.UploadListAdapter; +import com.chengww.demo.constants.Constants; +import com.chengww.demo.model.MessageEvent; +import com.chengww.demo.model.ObjectListEventModel; +import com.chengww.demo.utils.BindContentView; +import com.chengww.demo.utils.BindEventBus; +import com.chengww.demo.utils.FileUtils; +import com.chengww.demo.utils.ToastUtils; +import com.chengww.qingstor_sdk_android.db.Progress; +import com.chengww.qingstor_sdk_android.task.UploadTask; +import com.chengww.qingstor_sdk_android.task.Uploader; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import butterknife.BindView; + +@BindEventBus +@BindContentView(R.layout.activity_upload_list) +public class UploadListActivity extends BaseActivity { + + @BindView(R.id.rv_upload_list) + RecyclerView rvUploadList; + private UploadListAdapter adapter; + private ObjectListEventModel model; + + @Override + protected void init() { + if (model == null) { + ToastUtils.show(this, R.string.parameter_error); + finish(); + return; + } + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setTitle(R.string.upload_list); + } + + adapter = new UploadListAdapter(null); + notifyList(); + + TextView empty = new TextView(this); + empty.setText(R.string.no_upload_task); + empty.setGravity(Gravity.CENTER); + empty.setPadding(0, 40, 0, 40); + adapter.setEmptyView(empty); + adapter.setOnItemChildClickListener((adapter, view, position) -> { + UploadTask task = (UploadTask) adapter.getData().get(position); + if (view.getId() != R.id.progress || task == null) return; + switch (task.progress.status) { + case Progress.NONE: + case Progress.PAUSE: + case Progress.ERROR: + task.start(); + break; + case Progress.LOADING: + case Progress.WAITING: + task.pause(); + break; + } + }); + + rvUploadList.setLayoutManager(new LinearLayoutManager(this)); + rvUploadList.setAdapter(adapter); + } + + private void notifyList() { + Map> taskMap = Uploader.getInstance().getTaskMap(); + Collection> values = taskMap.values(); + List> tasks; + if (values instanceof List) { + tasks = (List>) values; + } else { + tasks = new ArrayList<>(values); + } + adapter.setNewData(tasks); + } + + private void selectFiles() { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("*/*"); + intent.addCategory(Intent.CATEGORY_OPENABLE); + try { + startActivityForResult(Intent.createChooser(intent, getString(R.string.select_files)), Constants.SELECT_FILES); + } catch (ActivityNotFoundException e) { + ToastUtils.show(this, R.string.no_file_select_app); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case Constants.SELECT_FILES: + Uri uri = data.getData(); + if (uri != null) { + + // Copy the file to cache + showLoading(R.string.brvah_loading); + new Thread(() -> { + String path = null; + try { + path = FileUtils.getPathByUri(UploadListActivity.this, uri); + } catch (IllegalArgumentException exception) { + + try { + File cacheDir = getExternalCacheDir(); + if (cacheDir == null || !cacheDir.exists()) { + cacheDir = getCacheDir(); + } + path = cacheDir.getAbsolutePath() + File.separator + FileUtils.getUriFileName(uri); + + File file = new File(path); + InputStream inputStream = UploadListActivity.this.getContentResolver().openInputStream(uri); + if (inputStream == null) return; + OutputStream outputStream = new FileOutputStream(file); + int len; + byte[] buffer = new byte[40960]; + while ((len = inputStream.read(buffer)) != -1) + outputStream.write(buffer, 0, len); + inputStream.close(); + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + File copiedFile = new File(path); + if (copiedFile.exists()) { + model.setFile(copiedFile); + EventBus.getDefault().postSticky(new MessageEvent<>(Constants.UPLOAD_LIST_FILE_COPIED, model)); + } else { + EventBus.getDefault().postSticky(new MessageEvent<>(Constants.UPLOAD_LIST_FILE_UNCOPIED, model)); + } + }).start(); + + } + break; + case Constants.UPLOAD_DETAIL: + notifyList(); + break; + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + Map> taskMap = Uploader.getInstance().getTaskMap(); + for (UploadTask task : taskMap.values()) { + task.unRegister(task.progress.tag); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_upload_list, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_add: + checkPermissions(); + return true; + case R.id.action_clear: + Uploader.getInstance().removeAll(); + notifyList(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) + public void onReceiveData(MessageEvent messageEvent) { + switch (messageEvent.getCode()) { + case Constants.UPLOAD_LIST: + if (model == null) { + model = messageEvent.getData(); + } + break; + case Constants.UPLOAD_LIST_FILE_COPIED: + EventBus.getDefault().removeStickyEvent(messageEvent); + dismissLoading(); + EventBus.getDefault().postSticky(new MessageEvent<>(Constants.UPLOAD_DETAIL, model)); + startActivityForResult(new Intent(this, UploadDetailActivity.class), + Constants.UPLOAD_DETAIL); + break; + case Constants.UPLOAD_LIST_FILE_UNCOPIED: + EventBus.getDefault().removeStickyEvent(messageEvent); + dismissLoading(); + ToastUtils.show(this, R.string.file_uncopied); + break; + } + + } + + private static String[] PERMISSIONS_STORAGE = { + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE}; + + private static int REQUEST_PERMISSION_CODE = 1; + + private void checkPermissions() { + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE); + } else { + selectFiles(); + } + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == REQUEST_PERMISSION_CODE) { + boolean hasPermission = true; + for (int i = 0; i < permissions.length; i++) { + if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { + hasPermission = false; + break; + } + } + + if (hasPermission) selectFiles(); + else ToastUtils.show(this, R.string.permission_defined); + } + } +} diff --git a/demo/src/main/java/com/chengww/demo/adapter/BucketListAdapter.java b/demo/src/main/java/com/chengww/demo/adapter/BucketListAdapter.java new file mode 100644 index 0000000..ac8e83c --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/adapter/BucketListAdapter.java @@ -0,0 +1,24 @@ +package com.chengww.demo.adapter; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chengww.demo.R; +import com.qingstor.sdk.service.Types; + +import java.util.List; + +/** + * Created by chengww on 2019/3/4. + */ +public class BucketListAdapter extends BaseQuickAdapter { + public BucketListAdapter(int layoutResId, List data) { + super(layoutResId, data); + } + + @Override + protected void convert(BaseViewHolder helper, Types.BucketModel item) { + helper.setText(R.id.tv_title, item.getName()) + .setText(R.id.tv_content, item.getURL()); + } +} + diff --git a/demo/src/main/java/com/chengww/demo/adapter/DownloadListAdapter.java b/demo/src/main/java/com/chengww/demo/adapter/DownloadListAdapter.java new file mode 100644 index 0000000..0c185b9 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/adapter/DownloadListAdapter.java @@ -0,0 +1,126 @@ +package com.chengww.demo.adapter; + +import android.support.annotation.Nullable; +import android.text.TextUtils; +import android.text.format.Formatter; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chengww.demo.R; +import com.chengww.demo.view.CircleProgressBar; +import com.chengww.qingstor_sdk_android.db.Progress; +import com.chengww.qingstor_sdk_android.exception.TaskException; +import com.chengww.qingstor_sdk_android.listener.DownloadListener; +import com.chengww.qingstor_sdk_android.task.DownloadTask; +import com.chengww.qingstor_sdk_android.task.Downloader; + +import java.io.File; +import java.util.List; + +/** + * Created by chengww on 2019/3/4. + */ +public class DownloadListAdapter extends BaseQuickAdapter { + + public DownloadListAdapter(@Nullable List data) { + super(R.layout.item_download_list, data); + } + + @Override + protected void convert(BaseViewHolder helper, DownloadTask item) { + Progress progress = item.progress; + helper.setText(R.id.tv_title, progress.fileName) + .setTag(R.id.tv_title, progress.tag) + .addOnClickListener(R.id.progress); + DownloadTask task = Downloader.getInstance().getTask(progress.tag); + if (task == null) return; + refresh(helper, progress); + task.register(new ListDownloadListener(progress.tag, helper)); + } + + public void refresh(BaseViewHolder helper, Progress item) { + CircleProgressBar progressBar = helper.getView(R.id.progress); + switch (item.status) { + default: + case Progress.WAITING: + progressBar.setStatus(CircleProgressBar.Status.Waiting); + helper.setText(R.id.tv_content, R.string.waiting); + break; + case Progress.NONE: + case Progress.PAUSE: + progressBar.setStatus(CircleProgressBar.Status.Pause); + helper.setText(R.id.tv_content, R.string.paused); + break; + case Progress.LOADING: + progressBar.setStatus(CircleProgressBar.Status.Loading); + + String currentSize = Formatter.formatFileSize(mContext, item.currentSize); + String totalSize = Formatter.formatFileSize(mContext, item.totalSize); + String speed = Formatter.formatFileSize(mContext, item.speed); + int progress = (int) (item.currentSize * 100 / item.totalSize); + if (progress > 100) progress = 100; + if (progress < 0) progress = 0; + helper.setText(R.id.tv_content, currentSize + "/" + totalSize + " · " + speed + "/s"); + progressBar.setProgress(progress); + break; + case Progress.ERROR: + progressBar.setStatus(CircleProgressBar.Status.Error); + String errorMessage = mContext.getString(R.string.unknown_error); + TaskException exception = item.exception; + if (exception != null && !TextUtils.isEmpty(exception.getI18nHint())) { + errorMessage = exception.getI18nHint(); + } + helper.setText(R.id.tv_content, errorMessage); + break; + case Progress.FINISH: + progressBar.setStatus(CircleProgressBar.Status.Finish); + helper.setText(R.id.tv_content, R.string.finished); + break; + } + } + + private class ListDownloadListener extends DownloadListener { + + private BaseViewHolder helper; + + ListDownloadListener(String tag, BaseViewHolder helper) { + super(tag); + this.helper = helper; + } + + @Override + public void onStart(Progress progress) { + if (progress.tag.equals(helper.getView(R.id.tv_title).getTag())) { + refresh(helper, progress); + } + } + + @Override + public void onProgress(Progress progress) { + if (progress.tag.equals(helper.getView(R.id.tv_title).getTag())) { + refresh(helper, progress); + } + } + + @Override + public void onError(Progress progress) { + if (progress.tag.equals(helper.getView(R.id.tv_title).getTag())) { + refresh(helper, progress); + } + } + + @Override + public void onFinish(File file, Progress progress) { + if (progress.tag.equals(helper.getView(R.id.tv_title).getTag())) { + refresh(helper, progress); + } + } + + @Override + public void onRemove(Progress progress) { + + } + } + + +} diff --git a/demo/src/main/java/com/chengww/demo/adapter/ObjectListAdapter.java b/demo/src/main/java/com/chengww/demo/adapter/ObjectListAdapter.java new file mode 100644 index 0000000..a7cacbc --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/adapter/ObjectListAdapter.java @@ -0,0 +1,47 @@ +package com.chengww.demo.adapter; + +import android.text.format.Formatter; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chengww.demo.R; +import com.chengww.demo.model.ListObjectsModel; +import com.chengww.demo.utils.MyDateUtils; +import com.chengww.demo.utils.StringUtils; +import com.qingstor.sdk.service.Types; + +import java.util.List; + +/** + * Created by chengww on 2019/3/4. + */ +public class ObjectListAdapter extends BaseQuickAdapter { + public ObjectListAdapter(int layoutResId, List data) { + super(layoutResId, data); + } + + @Override + protected void convert(BaseViewHolder helper, ListObjectsModel item) { + Types.KeyModel file = item.getFile(); + String folder = item.getFolder(); + if (file == null) { + helper.setGone(R.id.tv_content, false) + .setText(R.id.tv_title, StringUtils.getFileName(folder)) + .setImageResource(R.id.iv_profile, R.drawable.ic_folder_40dp) + .setGone(R.id.iv_delete, false); + } else { + String modified = MyDateUtils.formateUTC(file.getCreated()); + String fileSize = Formatter.formatFileSize(mContext, file.getSize()); + String mimeType = file.getMimeType(); + + helper.setGone(R.id.tv_content, true) + .setText(R.id.tv_title, StringUtils.getFileName(file.getKey())) + .setImageResource(R.id.iv_profile, R.drawable.ic_file_40dp) + .setText(R.id.tv_content, modified + " " + fileSize + " " + mimeType) + .setGone(R.id.iv_delete, true) + .addOnClickListener(R.id.iv_delete); + + } + } +} + diff --git a/demo/src/main/java/com/chengww/demo/adapter/UploadListAdapter.java b/demo/src/main/java/com/chengww/demo/adapter/UploadListAdapter.java new file mode 100644 index 0000000..f6456d0 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/adapter/UploadListAdapter.java @@ -0,0 +1,127 @@ +package com.chengww.demo.adapter; + +import android.support.annotation.Nullable; +import android.text.TextUtils; +import android.text.format.Formatter; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chengww.demo.R; +import com.chengww.demo.view.CircleProgressBar; +import com.chengww.qingstor_sdk_android.db.Progress; +import com.chengww.qingstor_sdk_android.exception.TaskException; +import com.chengww.qingstor_sdk_android.listener.UploadListener; +import com.chengww.qingstor_sdk_android.task.UploadTask; +import com.chengww.qingstor_sdk_android.task.Uploader; + +import java.util.List; + +/** + * Created by chengww on 2019/3/4. + */ +public class UploadListAdapter extends BaseQuickAdapter, BaseViewHolder> { + + public UploadListAdapter(@Nullable List> data) { + super(R.layout.item_download_list, data); + } + + @Override + protected void convert(BaseViewHolder helper, UploadTask item) { + Progress progress = item.progress; + helper.setText(R.id.tv_title, progress.objectKey) + .setTag(R.id.tv_title, progress.tag) + .addOnClickListener(R.id.progress); + UploadTask task = (UploadTask) Uploader.getInstance().getTask(progress.tag); + if (task == null) return; + task.register(new ListUploadListener(progress.tag, helper)); + refresh(helper, progress); + } + + public void refresh(BaseViewHolder helper, Progress item) { + CircleProgressBar progressBar = helper.getView(R.id.progress); + switch (item.status) { + default: + case Progress.WAITING: + progressBar.setStatus(CircleProgressBar.Status.Waiting); + helper.setText(R.id.tv_content, R.string.waiting); + break; + case Progress.NONE: + case Progress.PAUSE: + progressBar.setStatus(CircleProgressBar.Status.Pause); + helper.setText(R.id.tv_content, R.string.paused); + break; + case Progress.LOADING: + progressBar.setStatus(CircleProgressBar.Status.Loading); + + String currentSize = Formatter.formatFileSize(mContext, item.currentSize); + String totalSize = Formatter.formatFileSize(mContext, item.totalSize); + String speed = Formatter.formatFileSize(mContext, item.speed); + int progress = (int) (item.currentSize * 100 / item.totalSize); + if (progress > 100) progress = 100; + if (progress < 0) progress = 0; + helper.setText(R.id.tv_content, currentSize + "/" + totalSize + " · " + speed + "/s"); + progressBar.setProgress(progress); + break; + case Progress.ERROR: + progressBar.setStatus(CircleProgressBar.Status.Error); + String errorMessage = mContext.getString(R.string.unknown_error); + TaskException exception = item.exception; + if (exception != null && !TextUtils.isEmpty(exception.getI18nHint())) { + errorMessage = exception.getI18nHint(); + } + helper.setText(R.id.tv_content, errorMessage); + break; + case Progress.FINISH: + progressBar.setStatus(CircleProgressBar.Status.Finish); + helper.setText(R.id.tv_content, R.string.finished); + break; + } + } + + private class ListUploadListener extends UploadListener { + + private BaseViewHolder helper; + + ListUploadListener(String tag, BaseViewHolder helper) { + super(tag); + this.helper = helper; + } + + @Override + public void onStart(Progress progress) { + if (progress.tag.equals(helper.getView(R.id.tv_title).getTag())) { + refresh(helper, progress); + } + } + + @Override + public void onProgress(Progress progress) { + if (progress.tag.equals(helper.getView(R.id.tv_title).getTag())) { + refresh(helper, progress); + } + } + + @Override + public void onError(Progress progress) { + if (progress.tag.equals(helper.getView(R.id.tv_title).getTag())) { + refresh(helper, progress); + } + } + + @Override + public void onFinish(String s, Progress progress) { + if (progress.tag.equals(helper.getView(R.id.tv_title).getTag())) { + refresh(helper, progress); + } + } + + @Override + public void onRemove(Progress progress) { + if (progress.tag.equals(helper.getView(R.id.tv_title).getTag())) { + refresh(helper, progress); + } + } + } + + +} \ No newline at end of file diff --git a/demo/src/main/java/com/chengww/demo/constants/Constants.java b/demo/src/main/java/com/chengww/demo/constants/Constants.java new file mode 100644 index 0000000..283b1c1 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/constants/Constants.java @@ -0,0 +1,20 @@ +package com.chengww.demo.constants; + +/** + * Created by chengww on 2019/2/27. + */ +public class Constants { + public static final String ACCESS_KEY = "access_key"; + public static final String ACCESS_SECRET = "access_secret"; + + // Events codes + public static final int LIST_BUCKETS = 1001; + public static final int LIST_OBJECTS = 1002; + public static final int UPLOAD_LIST = 1003; + public static final int UPLOAD_LIST_FILE_COPIED = 1004; + public static final int UPLOAD_LIST_FILE_UNCOPIED = 1005; + public static final int UPLOAD_DETAIL = 1006; + + // Intent codes + public static final int SELECT_FILES = 10001; +} diff --git a/demo/src/main/java/com/chengww/demo/model/ListObjectsModel.java b/demo/src/main/java/com/chengww/demo/model/ListObjectsModel.java new file mode 100644 index 0000000..2e3b9ba --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/model/ListObjectsModel.java @@ -0,0 +1,35 @@ +package com.chengww.demo.model; + +import com.qingstor.sdk.service.Types; + +/** + * Created by chengww on 2019/2/28. + */ +public class ListObjectsModel { + private Types.KeyModel file; + private String folder; + + public ListObjectsModel(Types.KeyModel file) { + this.file = file; + } + + public ListObjectsModel(String folder) { + this.folder = folder; + } + + public Types.KeyModel getFile() { + return file; + } + + public void setFile(Types.KeyModel file) { + this.file = file; + } + + public String getFolder() { + return folder; + } + + public void setFolder(String folder) { + this.folder = folder; + } +} diff --git a/demo/src/main/java/com/chengww/demo/model/MessageEvent.java b/demo/src/main/java/com/chengww/demo/model/MessageEvent.java new file mode 100644 index 0000000..93b5d45 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/model/MessageEvent.java @@ -0,0 +1,45 @@ +package com.chengww.demo.model; + +import android.support.annotation.NonNull; + +/** + * Created by chengww on 2019/2/28. + */ +public class MessageEvent { + private int code; + private T data; + + public MessageEvent(int code) { + this.code = code; + } + + public MessageEvent(int code, T data) { + this.code = code; + this.data = data; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + @NonNull + @Override + public String toString() { + return "EventMessage{" + + "code=" + code + + ", data=" + data + + '}'; + } +} diff --git a/demo/src/main/java/com/chengww/demo/model/ObjectListEventModel.java b/demo/src/main/java/com/chengww/demo/model/ObjectListEventModel.java new file mode 100644 index 0000000..34677a1 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/model/ObjectListEventModel.java @@ -0,0 +1,53 @@ +package com.chengww.demo.model; + +import com.qingstor.sdk.service.Bucket; + +import java.io.File; + +/** + * Created by chengww on 2019/2/28. + */ +public class ObjectListEventModel { + private Bucket bucket; + private String prefix; + private File file; + + public ObjectListEventModel(Bucket bucket) { + this.bucket = bucket; + } + + public ObjectListEventModel(Bucket bucket, String prefix) { + this.bucket = bucket; + this.prefix = prefix; + } + + public ObjectListEventModel(Bucket bucket, String prefix, File file) { + this.bucket = bucket; + this.prefix = prefix; + this.file = file; + } + + public Bucket getBucket() { + return bucket; + } + + public void setBucket(Bucket bucket) { + this.bucket = bucket; + } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } +} diff --git a/demo/src/main/java/com/chengww/demo/model/UploadListModel.java b/demo/src/main/java/com/chengww/demo/model/UploadListModel.java new file mode 100644 index 0000000..6a5e9ba --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/model/UploadListModel.java @@ -0,0 +1,53 @@ +package com.chengww.demo.model; + +import com.qingstor.sdk.service.Bucket; + +import java.io.File; + +/** + * Created by chengww on 2019/3/5. + */ +public class UploadListModel { + private Bucket bucket; + private String prefix; + private File file; + + public UploadListModel(Bucket bucket) { + this.bucket = bucket; + } + + public UploadListModel(Bucket bucket, String prefix) { + this.bucket = bucket; + this.prefix = prefix; + } + + public UploadListModel(Bucket bucket, String prefix, File file) { + this.bucket = bucket; + this.prefix = prefix; + this.file = file; + } + + public Bucket getBucket() { + return bucket; + } + + public void setBucket(Bucket bucket) { + this.bucket = bucket; + } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } +} diff --git a/demo/src/main/java/com/chengww/demo/utils/BindContentView.java b/demo/src/main/java/com/chengww/demo/utils/BindContentView.java new file mode 100644 index 0000000..4e916ca --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/utils/BindContentView.java @@ -0,0 +1,17 @@ +package com.chengww.demo.utils; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by chengww on 2019/3/5. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface BindContentView { + int value(); +} diff --git a/demo/src/main/java/com/chengww/demo/utils/BindEventBus.java b/demo/src/main/java/com/chengww/demo/utils/BindEventBus.java new file mode 100644 index 0000000..073b82b --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/utils/BindEventBus.java @@ -0,0 +1,15 @@ +package com.chengww.demo.utils; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by chengww on 2019/2/28. + * Add this annotation above the classes need bind event bus. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface BindEventBus { +} diff --git a/demo/src/main/java/com/chengww/demo/utils/FileUtils.java b/demo/src/main/java/com/chengww/demo/utils/FileUtils.java new file mode 100644 index 0000000..892100f --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/utils/FileUtils.java @@ -0,0 +1,101 @@ +package com.chengww.demo.utils; + +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.DocumentsContract; +import android.provider.MediaStore; + +/** + * Created by chengww on 2019/3/4. + */ +public class FileUtils { + public static String getPathByUri(Context context, Uri uri) throws IllegalArgumentException { + String path = ""; + if (context == null || uri == null) { + return path; + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, uri)) { + String docId = DocumentsContract.getDocumentId(uri); + if (isExternalStorageDocument(uri)) { + String[] split = docId.split(":"); + if (split.length >= 2) { + String type = split[0]; + if ("primary".equalsIgnoreCase(type)) { + path = Environment.getExternalStorageDirectory() + "/" + split[1]; + } + } + } else if (isDownloadsDocument(uri)) { + Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId)); + path = getDataColumn(context, contentUri, null, null); + } else if (isMediaDocument(uri)) { + String[] split = docId.split(":"); + if (split.length >= 2) { + String type = split[0]; + Uri contentUris = null; + if ("image".equals(type)) { + contentUris = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + } else if ("video".equals(type)) { + contentUris = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + } else if ("audio".equals(type)) { + contentUris = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } + String selection = MediaStore.Images.Media._ID + "=?"; + String[] selectionArgs = new String[]{split[1]}; + path = getDataColumn(context, contentUris, selection, selectionArgs); + } + } + } else if ("file".equalsIgnoreCase(uri.getScheme())) { + path = uri.getPath(); + } else { + throw new IllegalArgumentException(); + } + return path; + } + + private static boolean isExternalStorageDocument(Uri uri) { + return "com.android.externalstorage.documents".equals(uri.getAuthority()); + } + + private static boolean isDownloadsDocument(Uri uri) { + return "com.android.providers.downloads.documents".equals(uri.getAuthority()); + } + + private static boolean isMediaDocument(Uri uri) { + return "com.android.providers.media.documents".equals(uri.getAuthority()); + } + + private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) throws IllegalArgumentException { + Cursor cursor = null; + String column = MediaStore.Images.Media.DATA; + String[] projection = {column}; + try { + cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); + if (cursor != null && cursor.moveToFirst()) { + int index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(index); + } + } finally { + if (cursor != null && !cursor.isClosed()) { + cursor.close(); + } + } + return null; + } + + public static String getUriFileName(Uri uri) { + if (uri == null) return null; + String fileName = null; + String path = uri.getPath(); + if (path == null) return null; + int cut = path.lastIndexOf('/'); + if (cut != -1) { + fileName = path.substring(cut + 1); + } + return fileName; + } + +} diff --git a/demo/src/main/java/com/chengww/demo/utils/MyDateUtils.java b/demo/src/main/java/com/chengww/demo/utils/MyDateUtils.java new file mode 100644 index 0000000..ecf6cfa --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/utils/MyDateUtils.java @@ -0,0 +1,32 @@ +package com.chengww.demo.utils; + + +import android.text.format.DateUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; + +/** + * Created by chengww on 2019/2/28. + */ +public class MyDateUtils { + + /** + * Format UTC time as the relative time + * @param utc UTC String + * @return the relative time + */ + public static String formateUTC(String utc) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); + try { + Date date = sdf.parse(utc); + return DateUtils.getRelativeTimeSpanString(date.getTime()).toString(); + } catch (ParseException e) { + e.printStackTrace(); + } + return "Date Error"; + } +} diff --git a/demo/src/main/java/com/chengww/demo/utils/SharedPreferencesUtils.java b/demo/src/main/java/com/chengww/demo/utils/SharedPreferencesUtils.java new file mode 100644 index 0000000..31c78ad --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/utils/SharedPreferencesUtils.java @@ -0,0 +1,114 @@ +package com.chengww.demo.utils; + +import android.content.Context; +import android.content.SharedPreferences; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; + +/** + * Created by chengww on 2019/2/27. + */ +public class SharedPreferencesUtils { + + private static final String FILE_NAME = "QINGSTOR_SDK_ANDROID_DEMO_CONFIG"; + + public static void put(Context context, String key, Object object) { + + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + + if (object instanceof String) { + editor.putString(key, (String) object); + } else if (object instanceof Integer) { + editor.putInt(key, (Integer) object); + } else if (object instanceof Boolean) { + editor.putBoolean(key, (Boolean) object); + } else if (object instanceof Float) { + editor.putFloat(key, (Float) object); + } else if (object instanceof Long) { + editor.putLong(key, (Long) object); + } else { + editor.putString(key, object.toString()); + } + + SharedPreferencesCompat.apply(editor); + } + + public static Object get(Context context, String key, Object defaultObject) { + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + + if (defaultObject instanceof String) { + return sp.getString(key, (String) defaultObject); + } else if (defaultObject instanceof Integer) { + return sp.getInt(key, (Integer) defaultObject); + } else if (defaultObject instanceof Boolean) { + return sp.getBoolean(key, (Boolean) defaultObject); + } else if (defaultObject instanceof Float) { + return sp.getFloat(key, (Float) defaultObject); + } else if (defaultObject instanceof Long) { + return sp.getLong(key, (Long) defaultObject); + } + + return null; + } + + public static void remove(Context context, String key) { + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.remove(key); + SharedPreferencesCompat.apply(editor); + } + + public static void clear(Context context) { + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.clear(); + SharedPreferencesCompat.apply(editor); + } + + public static boolean contains(Context context, String key) { + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + return sp.contains(key); + } + + public static Map getAll(Context context) { + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + return sp.getAll(); + } + + private static class SharedPreferencesCompat { + private static final Method sApplyMethod = findApplyMethod(); + + @SuppressWarnings({"unchecked", "rawtypes"}) + private static Method findApplyMethod() { + try { + Class clz = SharedPreferences.Editor.class; + return clz.getMethod("apply"); + } catch (NoSuchMethodException e) { + } + + return null; + } + + public static void apply(SharedPreferences.Editor editor) { + try { + if (sApplyMethod != null) { + sApplyMethod.invoke(editor); + return; + } + } catch (IllegalArgumentException e) { + } catch (IllegalAccessException e) { + } catch (InvocationTargetException e) { + } + editor.commit(); + } + } +} diff --git a/demo/src/main/java/com/chengww/demo/utils/StringUtils.java b/demo/src/main/java/com/chengww/demo/utils/StringUtils.java new file mode 100644 index 0000000..2a7d3f4 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/utils/StringUtils.java @@ -0,0 +1,32 @@ +package com.chengww.demo.utils; + +import android.text.TextUtils; + +/** + * Created by chengww on 2019/2/28.
+ * String operations. + */ +public class StringUtils { + /** + * Get file/folder name from the api response + * @param key key + * @return file/folder name + */ + public static String getFileName(String key) { + if (TextUtils.isEmpty(key)) return key; + int index = key.lastIndexOf("/"); + if (index > -1) { + if (index == key.length() - 1) { + String substring = key.substring(0, key.length() - 1); + int i = substring.lastIndexOf("/"); + if (i > -1) { + return substring.substring(i + 1); + } + return substring; + } + return key.substring(index + 1); + } + return key; + } + +} diff --git a/demo/src/main/java/com/chengww/demo/utils/ToastUtils.java b/demo/src/main/java/com/chengww/demo/utils/ToastUtils.java new file mode 100644 index 0000000..6c6c149 --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/utils/ToastUtils.java @@ -0,0 +1,27 @@ +package com.chengww.demo.utils; + +import android.content.Context; +import android.text.TextUtils; +import android.widget.Toast; + +/** + * Created by chengww on 2019/2/28.
+ * Used for show a toast. + */ +public class ToastUtils { + private static Toast toast = null; + + public static void show(Context context, int strRes) { + show(context, context.getString(strRes)); + } + + public static void show(Context context, String msg) { + if (null == context || TextUtils.isEmpty(msg)) return; + if (toast == null) { + toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT); + } + toast.setText(msg); + toast.show(); + } + +} diff --git a/demo/src/main/java/com/chengww/demo/view/CircleProgressBar.java b/demo/src/main/java/com/chengww/demo/view/CircleProgressBar.java new file mode 100644 index 0000000..08adf2c --- /dev/null +++ b/demo/src/main/java/com/chengww/demo/view/CircleProgressBar.java @@ -0,0 +1,148 @@ +package com.chengww.demo.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.widget.ProgressBar; + +import com.chengww.demo.R; + +/** + * Created by chengww on 2019/3/4.
+ * A custom view used for the download/upload list. + * @see https://blog.chengww.com/archives/CircleProgressBar.html + */ +public class CircleProgressBar extends ProgressBar { + private int mDefaultColor; + private int mReachedColor; + private float mDefaultHeight; + private float mReachedHeight; + private float mRadius; + private Paint mPaint; + + private Status mStatus = Status.Waiting; + + public CircleProgressBar(Context context) { + this(context, null); + } + + public CircleProgressBar(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public CircleProgressBar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CircleProgressBar); + mDefaultColor = typedArray.getColor(R.styleable.CircleProgressBar_defaultColor, Color.parseColor("#D8D8D8")); + mReachedColor = typedArray.getColor(R.styleable.CircleProgressBar_reachedColor, Color.parseColor("#1296DB")); + mDefaultHeight = typedArray.getDimension(R.styleable.CircleProgressBar_defaultHeight, dp2px(context, 2.5f)); + mReachedHeight = typedArray.getDimension(R.styleable.CircleProgressBar_reachedHeight, dp2px(context, 2.5f)); + mRadius = typedArray.getDimension(R.styleable.CircleProgressBar_radius, dp2px(context, 17)); + typedArray.recycle(); + + setPaint(); + } + + private void setPaint() { + mPaint = new Paint(); + mPaint.setAntiAlias(true); + mPaint.setDither(true); + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setStrokeCap(Paint.Cap.ROUND); + } + + @Override + protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + + float paintHeight = Math.max(mReachedHeight, mDefaultHeight); + + if (heightMode != MeasureSpec.EXACTLY) { + int exceptHeight = (int) (getPaddingTop() + getPaddingBottom() + mRadius * 2 + paintHeight); + heightMeasureSpec = MeasureSpec.makeMeasureSpec(exceptHeight, MeasureSpec.EXACTLY); + } + if (widthMode != MeasureSpec.EXACTLY) { + int exceptWidth = (int) (getPaddingLeft() + getPaddingRight() + mRadius * 2 + paintHeight); + widthMeasureSpec = MeasureSpec.makeMeasureSpec(exceptWidth, MeasureSpec.EXACTLY); + } + + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + @Override + protected synchronized void onDraw(Canvas canvas) { + super.onDraw(canvas); + canvas.save(); + canvas.translate(getPaddingStart(), getPaddingTop()); + + int mDiameter = (int) (mRadius * 2); + if (mStatus == Status.Loading) { + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setColor(mDefaultColor); + mPaint.setStrokeWidth(mDefaultHeight); + canvas.drawCircle(mRadius, mRadius, mRadius, mPaint); + + mPaint.setColor(mReachedColor); + mPaint.setStrokeWidth(mReachedHeight); + float sweepAngle = getProgress() * 1.0f / getMax() * 360; + canvas.drawArc(new RectF(0, 0, mRadius * 2, mRadius * 2), -90, sweepAngle, false, mPaint); + + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setStrokeWidth(dp2px(getContext(), 2)); + mPaint.setColor(Color.parseColor("#667380")); + canvas.drawLine(mRadius * 4 / 5, mRadius * 3 / 4, mRadius * 4 / 5, 2 * mRadius - (mRadius * 3 / 4), mPaint); + canvas.drawLine(2 * mRadius - (mRadius * 4 / 5), mRadius * 3 / 4, 2 * mRadius - (mRadius * 4 / 5), 2 * mRadius - (mRadius * 3 / 4), mPaint); + } else { + int drawableInt; + switch (mStatus) { + case Waiting: + default: + drawableInt = R.mipmap.ic_waiting; + break; + case Pause: + drawableInt = R.mipmap.ic_pause; + break; + case Finish: + drawableInt = R.mipmap.ic_finish; + break; + case Error: + drawableInt = R.mipmap.ic_error; + break; + } + Drawable drawable = getContext().getResources().getDrawable(drawableInt); + drawable.setBounds(0, 0, mDiameter, mDiameter); + drawable.draw(canvas); + } + canvas.restore(); + } + + public Status getStatus() { + return mStatus; + } + + public void setStatus(Status status) { + if (mStatus == status) return; + mStatus = status; + invalidate(); + } + + public enum Status { + Waiting, + Pause, + Loading, + Error, + Finish + } + + float dp2px(Context context, float dp) { + final float scale = context.getResources().getDisplayMetrics().density; + return dp * scale + 0.5f; + } +} diff --git a/demo/src/main/res/drawable-v24/ic_launcher_foreground.xml b/demo/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ b/demo/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/demo/src/main/res/drawable/ic_file_40dp.xml b/demo/src/main/res/drawable/ic_file_40dp.xml new file mode 100644 index 0000000..86e4286 --- /dev/null +++ b/demo/src/main/res/drawable/ic_file_40dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/demo/src/main/res/drawable/ic_folder_40dp.xml b/demo/src/main/res/drawable/ic_folder_40dp.xml new file mode 100644 index 0000000..535d30b --- /dev/null +++ b/demo/src/main/res/drawable/ic_folder_40dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/demo/src/main/res/drawable/ic_launcher_background.xml b/demo/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ b/demo/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/src/main/res/layout/activity_bucket_list.xml b/demo/src/main/res/layout/activity_bucket_list.xml new file mode 100644 index 0000000..2c1c81c --- /dev/null +++ b/demo/src/main/res/layout/activity_bucket_list.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/demo/src/main/res/layout/activity_download_list.xml b/demo/src/main/res/layout/activity_download_list.xml new file mode 100644 index 0000000..af6cee5 --- /dev/null +++ b/demo/src/main/res/layout/activity_download_list.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/demo/src/main/res/layout/activity_main.xml b/demo/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..acff57b --- /dev/null +++ b/demo/src/main/res/layout/activity_main.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + +

O>&$dez>2Lgs|7RENCYN7yl%GI-%k*cb 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%0DXIL24Qi2K5bMi_BZxL`Mi5&Oc3 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�e+7bK6S2myq%N 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