Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d9ff3e0 authored by David A. Velasco's avatar David A. Velasco
Browse files

Refactoed operations on Shares

parent ad60bc9e
Loading
Loading
Loading
Loading
+19 −57
Original line number Diff line number Diff line
/* ownCloud Android Library is available under MIT license
 *   @author masensio
 *   @author David A. Velasco
 *   Copyright (C) 2015 ownCloud Inc.
 *   
 *   Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -24,24 +26,16 @@

package com.owncloud.android.lib.resources.shares;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;

import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.http.HttpStatus;

import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;

/**
 * Creates a new share.  This allows sharing with a user or group or as a link.
 * 
 * @author masensio
 *
 */
public class CreateRemoteShareOperation extends RemoteOperation {

@@ -54,8 +48,6 @@ public class CreateRemoteShareOperation extends RemoteOperation {
	private static final String PARAM_PASSWORD = "password";
	private static final String PARAM_PERMISSIONS = "permissions";

	private ArrayList<OCShare> mShares;  // List of shares for result, one share in this case
	
	private String mRemoteFilePath;
	private ShareType mShareType;
	private String mShareWith;
@@ -118,7 +110,6 @@ public class CreateRemoteShareOperation extends RemoteOperation {
		try {
			// Post Method
			post = new PostMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH);
			//Log_OC.d(TAG, "URL ------> " + client.getBaseUri() + ShareUtils.SHARING_API_PATH);

			post.setRequestHeader( "Content-Type",
                    "application/x-www-form-urlencoded; charset=utf-8"); // necessary for special characters
@@ -127,7 +118,7 @@ public class CreateRemoteShareOperation extends RemoteOperation {
			post.addParameter(PARAM_SHARE_TYPE, Integer.toString(mShareType.getValue()));
			post.addParameter(PARAM_SHARE_WITH, mShareWith);
			if (mPublicUpload) {
				post.addParameter(PARAM_PUBLIC_UPLOAD, Boolean.toString(mPublicUpload));
				post.addParameter(PARAM_PUBLIC_UPLOAD, Boolean.toString(true));
			}
			if (mPassword != null && mPassword.length() > 0) {
				post.addParameter(PARAM_PASSWORD, mPassword);
@@ -140,52 +131,23 @@ public class CreateRemoteShareOperation extends RemoteOperation {

			if(isSuccess(status)) {
				String response = post.getResponseBodyAsString();
				ArrayList<Object> resultData = new ArrayList<Object>();

				// Parse xml response --> obtain the response in ShareFiles ArrayList
				// convert String into InputStream
				InputStream is = new ByteArrayInputStream(response.getBytes());
				ShareXMLParser xmlParser = new ShareXMLParser();
				mShares = xmlParser.parseXMLResponse(is);
				if (xmlParser.isSuccess()) {
					if (mShares != null && mShares.size() > 0) {
						Log_OC.d(TAG, "Created " + mShares.size() + " share(s)");
						result = new RemoteOperationResult(ResultCode.OK);
						for (OCShare share: mShares) {
							resultData.add(share);
						}
						result.setData(resultData);

						if (mGetShareDetails) {
							// retrieve more info
							OCShare emptyShare = (OCShare) resultData.get(0);
				ShareToRemoteOperationResultParser parser = new ShareToRemoteOperationResultParser(
						new ShareXMLParser()
				);
				parser.setOneOrMoreSharesRequired(true);
				parser.setOwnCloudVersion(client.getOwnCloudVersion());
				parser.setServerBaseUri(client.getBaseUri());
				result = parser.parse(response);

				if (result.isSuccess()) {
					Log_OC.d(TAG, "Created " + result.getData().size() + " share(s)");	// should be one
					if (mGetShareDetails) {
						// retrieve more info - POST operation only returns the index of the new share
						OCShare emptyShare = (OCShare) result.getData().get(0);
						GetRemoteShareOperation getInfo = new GetRemoteShareOperation(emptyShare.getIdRemoteShared());
						result = getInfo.execute(client);
					}

					} else {
						result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE);
						Log_OC.e(TAG, "Successful status with no share in it");
					}

				} else if (xmlParser.isWrongParameter()){
					result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else if (xmlParser.isNotFound()){
					result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else if (xmlParser.isForbidden()) {
					result = new RemoteOperationResult(ResultCode.SHARE_FORBIDDEN);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else {
					result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE);
				}

			} else {
+11 −43
Original line number Diff line number Diff line
@@ -28,17 +28,11 @@ package com.owncloud.android.lib.resources.shares;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;

import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.http.HttpStatus;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;


/** 
 * Get the data about a Share resource, known its remote ID.
@@ -67,47 +61,21 @@ public class GetRemoteShareOperation extends RemoteOperation {
		// Get the response
		try{
			get = new GetMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH + "/" + Long.toString(mRemoteId));
			//get.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);
			get.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);

			status = client.executeMethod(get);

			if(isSuccess(status)) {
				String response = get.getResponseBodyAsString();
				ArrayList<Object> resultData = new ArrayList<Object>();

				// Parse xml response --> obtain the response in ShareFiles ArrayList
				// convert String into InputStream
				InputStream is = new ByteArrayInputStream(response.getBytes());
				ShareXMLParser xmlParser = new ShareXMLParser();
				List<OCShare> shares = xmlParser.parseXMLResponse(is);
				if (xmlParser.isSuccess()) {
					if (shares != null && shares.size() > 0) {
						Log_OC.d(TAG, "Got " + shares.size() + " shares");
						result = new RemoteOperationResult(ResultCode.OK);
						resultData.add(shares.get(0));
						result.setData(resultData);
					} else {
						result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE);
						Log_OC.e(TAG, "Successful status with no share in it");
					}

				} else if (xmlParser.isWrongParameter()){
					result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else if (xmlParser.isNotFound()){
					result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else if (xmlParser.isForbidden()) {
					result = new RemoteOperationResult(ResultCode.SHARE_FORBIDDEN);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else {
					result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE);
				}
				// Parse xml response and obtain the list of shares
				ShareToRemoteOperationResultParser parser = new ShareToRemoteOperationResultParser(
						new ShareXMLParser()
				);
				parser.setOneOrMoreSharesRequired(true);
				parser.setOwnCloudVersion(client.getOwnCloudVersion());
				parser.setServerBaseUri(client.getBaseUri());
				result = parser.parse(response);

			} else {
				result = new RemoteOperationResult(false, status, get.getResponseHeaders());
+14 −58
Original line number Diff line number Diff line
/* ownCloud Android Library is available under MIT license
 *   @author masensio
 *   @author David A. Velasco
 *   Copyright (C) 2015 ownCloud Inc.
 *   
 *   Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -24,10 +26,6 @@

package com.owncloud.android.lib.resources.shares;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;

import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.http.HttpStatus;
@@ -35,18 +33,14 @@ import org.apache.http.HttpStatus;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;


/**
 * Provide a list shares for a specific file.  
 * The input is the full path of the desired file.  
 * The output is a list of everyone who has the file shared with them.
 * 
 * @author masensio
 *
 */

public class GetRemoteSharesForFileOperation extends RemoteOperation {

	private static final String TAG = GetRemoteSharesForFileOperation.class.getSimpleName();
@@ -55,8 +49,6 @@ public class GetRemoteSharesForFileOperation extends RemoteOperation {
	private static final String PARAM_RESHARES = "reshares";
	private static final String PARAM_SUBFILES = "subfiles";

	private ArrayList<OCShare> mShares;  // List of shares for result, one share in this case
	
	private String mRemoteFilePath;
	private boolean mReshares;
	private boolean mSubfiles;
@@ -102,53 +94,17 @@ public class GetRemoteSharesForFileOperation extends RemoteOperation {

			if(isSuccess(status)) {
				String response = get.getResponseBodyAsString();
				ArrayList<Object> resultData = new ArrayList<Object>();

				// Parse xml response --> obtain the response in ShareFiles ArrayList
				// convert String into InputStream
				InputStream is = new ByteArrayInputStream(response.getBytes());
				ShareXMLParser xmlParser = new ShareXMLParser();
				mShares = xmlParser.parseXMLResponse(is);
				if (xmlParser.isSuccess()) {
					if (mShares != null) {	// 0 shares is a right response
						Log_OC.d(TAG, "Got " + mShares.size() + " shares");
						result = new RemoteOperationResult(ResultCode.OK);
						for (OCShare share: mShares) {
							// Build the link
							if (	share.getShareType() == ShareType.PUBLIC_LINK &&
									share.getShareLink() == null &&
									share.getToken().length() > 0
									) {
								String linkToken = ShareUtils.getSharingToken(
										client.getOwnCloudVersion());
								share.setShareLink(client.getBaseUri() + linkToken +
										share.getToken());
							}
							resultData.add(share);
						}
						result.setData(resultData);
					} else {
						result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE);
						Log_OC.e(TAG, "Successful status with no share in it");
					}

				} else if (xmlParser.isWrongParameter()){
					result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);
				// Parse xml response and obtain the list of shares
				ShareToRemoteOperationResultParser parser = new ShareToRemoteOperationResultParser(
						new ShareXMLParser()
				);
				parser.setOwnCloudVersion(client.getOwnCloudVersion());
				parser.setServerBaseUri(client.getBaseUri());
				result = parser.parse(response);

				} else if (xmlParser.isNotFound()){
					result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else if (xmlParser.isForbidden()) {
					result = new RemoteOperationResult(ResultCode.SHARE_FORBIDDEN);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else {
					result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE);
				if (result.isSuccess()) {
					Log_OC.d(TAG, "Got " + result.getData().size() + " shares");
				}

			} else {
+10 −44
Original line number Diff line number Diff line
/* ownCloud Android Library is available under MIT license
 *   @author masensio
 *   @author David A. Velasco
 *   Copyright (C) 2015 ownCloud Inc.
 *   
 *   Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -24,33 +26,24 @@

package com.owncloud.android.lib.resources.shares;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;

import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.http.HttpStatus;

import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;


/** 
 * Get the data from the server about ALL the known shares owned by the requester.
 * 
 * @author masensio
 *
 */

public class GetRemoteSharesOperation extends RemoteOperation {

	private static final String TAG = GetRemoteSharesOperation.class.getSimpleName();

	private ArrayList<OCShare> mShares;  // List of shares for result


	public GetRemoteSharesOperation() {
	}
@@ -71,41 +64,14 @@ public class GetRemoteSharesOperation extends RemoteOperation {

			if(isSuccess(status)) {
				String response = get.getResponseBodyAsString();
				ArrayList<Object> resultData = new ArrayList<Object>();

				// Parse xml response --> obtain the response in ShareFiles ArrayList
				// convert String into InputStream
				InputStream is = new ByteArrayInputStream(response.getBytes());
				ShareXMLParser xmlParser = new ShareXMLParser();
				mShares = xmlParser.parseXMLResponse(is);
				if (xmlParser.isSuccess()) {
					if (mShares != null) {		// 0 shares is a right response
						Log_OC.d(TAG, "Got " + mShares.size() + " shares");
						result = new RemoteOperationResult(ResultCode.OK);
						for (OCShare share : mShares) {
							resultData.add(share);
						}
						result.setData(resultData);
					}

				} else if (xmlParser.isWrongParameter()){
					result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else if (xmlParser.isNotFound()){
					result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else if (xmlParser.isForbidden()) {
					result = new RemoteOperationResult(ResultCode.SHARE_FORBIDDEN);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else {
					result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE);
				}
				// Parse xml response and obtain the list of shares
				ShareToRemoteOperationResultParser parser = new ShareToRemoteOperationResultParser(
						new ShareXMLParser()
				);
				parser.setOwnCloudVersion(client.getOwnCloudVersion());
				parser.setServerBaseUri(client.getBaseUri());
				result = parser.parse(response);

			} else {
				result = new RemoteOperationResult(false, status, get.getResponseHeaders());
+10 −36
Original line number Diff line number Diff line
/* ownCloud Android Library is available under MIT license
 *   @author masensio
 *   @author David A. Velasco
 *   Copyright (C) 2015 ownCloud Inc.
 *   
 *   Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -24,24 +26,16 @@

package com.owncloud.android.lib.resources.shares;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;

import org.apache.commons.httpclient.HttpStatus;
import org.apache.jackrabbit.webdav.client.methods.DeleteMethod;

import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;

/**
 * Remove a share
 * 
 * @author masensio
 *
 */

public class RemoveRemoteShareOperation extends RemoteOperation {
@@ -78,35 +72,15 @@ public class RemoveRemoteShareOperation extends RemoteOperation {

			if(isSuccess(status)) {
				String response = delete.getResponseBodyAsString();
				ArrayList<Object> resultData = new ArrayList<Object>();

				// Parse xml response
				// convert String into InputStream
				InputStream is = new ByteArrayInputStream(response.getBytes());
				ShareXMLParser xmlParser = new ShareXMLParser();
				xmlParser.parseXMLResponse(is);
				if (xmlParser.isSuccess()) {
					result = new RemoteOperationResult(ResultCode.OK);
				} else if (xmlParser.isWrongParameter()){
					result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else if (xmlParser.isNotFound()){
					result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else if (xmlParser.isForbidden()) {
					result = new RemoteOperationResult(ResultCode.SHARE_FORBIDDEN);
					resultData.add(xmlParser.getMessage());
					result.setData(resultData);

				} else {
					result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE);
				}
				// Parse xml response and obtain the list of shares
				ShareToRemoteOperationResultParser parser = new ShareToRemoteOperationResultParser(
						new ShareXMLParser()
				);
				result = parser.parse(response);

				Log_OC.d(TAG, "Unshare " + id + ": " + result.getLogMessage());

			} else {
				result = new RemoteOperationResult(false, status, delete.getResponseHeaders());
			}
Loading