From 87a8b418ded714e64aa77c9a007801b6cf4a985e Mon Sep 17 00:00:00 2001
From: davigonz <dgonzalez@solidgear.es>
Date: Thu, 21 Feb 2019 10:41:56 +0100
Subject: [PATCH] Fix some indentation issues

---
 .../shares/GetRemoteShareesOperation.java     |  42 +-
 .../lib/resources/shares/ShareXMLParser.java  | 799 +++++++++---------
 2 files changed, 425 insertions(+), 416 deletions(-)

diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
index 611f2e8c..2a90128e 100644
--- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
@@ -47,24 +47,24 @@ import static com.owncloud.android.lib.common.operations.RemoteOperationResult.R
 
 /**
  * Created by masensio on 08/10/2015.
- *
+ * <p>
  * Retrieves a list of sharees (possible targets of a share) from the ownCloud server.
- *
+ * <p>
  * Currently only handles users and groups. Users in other OC servers (federation) should be added later.
- *
+ * <p>
  * Depends on SHAREE API. {@See https://github.com/owncloud/documentation/issues/1626}
- *
+ * <p>
  * Syntax:
- *    Entry point: ocs/v2.php/apps/files_sharing/api/v1/sharees
- *    HTTP method: GET
- *    url argument: itemType - string, required
- *    url argument: format - string, optional
- *    url argument: search - string, optional
- *    url arguments: perPage - int, optional
- *    url arguments: page - int, optional
- *
+ * Entry point: ocs/v2.php/apps/files_sharing/api/v1/sharees
+ * HTTP method: GET
+ * url argument: itemType - string, required
+ * url argument: format - string, optional
+ * url argument: search - string, optional
+ * url arguments: perPage - int, optional
+ * url arguments: page - int, optional
+ * <p>
  * Status codes:
- *    100 - successful
+ * 100 - successful
  *
  * @author masensio
  * @author David A. Velasco
@@ -108,9 +108,9 @@ public class GetRemoteShareesOperation extends RemoteOperation<ArrayList<JSONObj
     /**
      * Constructor
      *
-     * @param searchString  	string for searching users, optional
-     * @param page			    page index in the list of results; beginning in 1
-     * @param perPage           maximum number of results in a single page
+     * @param searchString string for searching users, optional
+     * @param page         page index in the list of results; beginning in 1
+     * @param perPage      maximum number of results in a single page
      */
     public GetRemoteShareesOperation(String searchString, int page, int perPage) {
         mSearchString = searchString;
@@ -122,7 +122,7 @@ public class GetRemoteShareesOperation extends RemoteOperation<ArrayList<JSONObj
     protected RemoteOperationResult<ArrayList<JSONObject>> run(OwnCloudClient client) {
         RemoteOperationResult<ArrayList<JSONObject>> result;
 
-        try{
+        try {
             Uri requestUri = client.getBaseUri();
             Uri.Builder uriBuilder = requestUri.buildUpon()
                     .appendEncodedPath(OCS_ROUTE)
@@ -139,7 +139,7 @@ public class GetRemoteShareesOperation extends RemoteOperation<ArrayList<JSONObj
             int status = client.executeHttpMethod(getMethod);
             String response = getMethod.getResponseBodyAsString();
 
-            if(isSuccess(status)) {
+            if (isSuccess(status)) {
                 Log_OC.d(TAG, "Successful response: " + response);
 
                 // Parse the response
@@ -163,8 +163,8 @@ public class GetRemoteShareesOperation extends RemoteOperation<ArrayList<JSONObj
                 };
 
                 ArrayList<JSONObject> data = new ArrayList<>(); // For result data
-                for (int i=0; i<6; i++) {
-                    for(int j=0; j< jsonResults[i].length(); j++){
+                for (int i = 0; i < 6; i++) {
+                    for (int j = 0; j < jsonResults[i].length(); j++) {
                         JSONObject jsonResult = jsonResults[i].getJSONObject(j);
                         data.add(jsonResult);
                         Log_OC.d(TAG, "*** Added item: " + jsonResult.getString(PROPERTY_LABEL));
@@ -174,7 +174,7 @@ public class GetRemoteShareesOperation extends RemoteOperation<ArrayList<JSONObj
                 result = new RemoteOperationResult<>(OK);
                 result.setData(data);
 
-                Log_OC.d(TAG, "*** Get Users or groups completed " );
+                Log_OC.d(TAG, "*** Get Users or groups completed ");
 
             } else {
                 result = new RemoteOperationResult<>(getMethod);
diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java
index bce07da5..a6265e1a 100644
--- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java
@@ -39,405 +39,414 @@ import java.util.ArrayList;
 
 /**
  * Parser for Share API Response
+ *
  * @author masensio
  * @author David González Verdugo
  */
 
 public class ShareXMLParser {
 
-	//private static final String TAG = ShareXMLParser.class.getSimpleName();
-
-	// No namespaces
-	private static final String ns = null;
-
-	// NODES for XML Parser
-	private static final String NODE_OCS = "ocs";
-
-	private static final String NODE_META = "meta";
-	private static final String NODE_STATUS = "status";
-	private static final String NODE_STATUS_CODE = "statuscode";
-	private static final String NODE_MESSAGE = "message";
-
-	private static final String NODE_DATA = "data";
-	private static final String NODE_ELEMENT = "element";
-	private static final String NODE_ID = "id";
-	private static final String NODE_ITEM_TYPE = "item_type";
-	private static final String NODE_ITEM_SOURCE = "item_source";
-	private static final String NODE_PARENT = "parent";
-	private static final String NODE_SHARE_TYPE = "share_type";
-	private static final String NODE_SHARE_WITH = "share_with";
-	private static final String NODE_FILE_SOURCE = "file_source";
-	private static final String NODE_PATH = "path";
-	private static final String NODE_PERMISSIONS = "permissions";
-	private static final String NODE_STIME = "stime";
-	private static final String NODE_EXPIRATION = "expiration";
-	private static final String NODE_TOKEN = "token";
-	private static final String NODE_STORAGE = "storage";
-	private static final String NODE_MAIL_SEND = "mail_send";
-	private static final String NODE_SHARE_WITH_DISPLAY_NAME = "share_with_displayname";
-	private static final String NODE_SHARE_WITH_ADDITIONAL_INFO = "share_with_additional_info";
-	private static final String NODE_NAME = "name";
-
-	private static final String NODE_URL = "url";
-
-	private static final String TYPE_FOLDER = "folder";
-
-	private static final int SUCCESS = 200;
-	private static final int ERROR_WRONG_PARAMETER = 400;
-	private static final int ERROR_FORBIDDEN = 403;
-	private static final int ERROR_NOT_FOUND = 404;
-
-	private String mStatus;
-	private int mStatusCode;
-	private String mMessage;
-
-	// Getters and Setters
-	public String getStatus() {
-		return mStatus;
-	}
-
-	public void setStatus(String status) {
-		this.mStatus = status;
-	}
-
-	public int getStatusCode() {
-		return mStatusCode;
-	}
-
-	public void setStatusCode(int statusCode) {
-		this.mStatusCode = statusCode;
-	}
-
-	public String getMessage() {
-		return mMessage;
-	}
-
-	public void setMessage(String message) {
-		this.mMessage = message;
-	}
-
-	// Constructor
-	public ShareXMLParser() {
-		mStatusCode = -1;
-	}
-
-	public boolean isSuccess() {
-		return mStatusCode == SUCCESS;
-	}
-
-	public boolean isForbidden() {
-		return mStatusCode == ERROR_FORBIDDEN;
-	}
-
-	public boolean isNotFound() {
-		return mStatusCode == ERROR_NOT_FOUND;
-	}
-
-	public boolean isWrongParameter() {
-		return mStatusCode == ERROR_WRONG_PARAMETER;
-	}
-
-	/**
-	 * Parse is as response of Share API
-	 * @param is
-	 * @return List of ShareRemoteFiles
-	 * @throws XmlPullParserException
-	 * @throws IOException
-	 */
-	public ArrayList<OCShare> parseXMLResponse(InputStream is) throws XmlPullParserException,
-			IOException {
-
-		try {
-			// XMLPullParser
-			XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
-			factory.setNamespaceAware(true);
-
-			XmlPullParser parser = Xml.newPullParser();
-			parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
-			parser.setInput(is, null);
-			parser.nextTag();
-			return readOCS(parser);
-
-		} finally {
-			is.close();
-		}
-	}
-
-	/**
-	 * Parse OCS node
-	 * @param parser
-	 * @return List of ShareRemoteFiles
-	 * @throws XmlPullParserException
-	 * @throws IOException
-	 */
-	private ArrayList<OCShare> readOCS (XmlPullParser parser) throws XmlPullParserException,
-			IOException {
-		ArrayList<OCShare> shares = new ArrayList<>();
-		parser.require(XmlPullParser.START_TAG,  ns , NODE_OCS);
-		while (parser.next() != XmlPullParser.END_TAG) {
-			if (parser.getEventType() != XmlPullParser.START_TAG) {
-				continue;
-			}
-			String name = parser.getName();
-			// read NODE_META and NODE_DATA
-			if (name.equalsIgnoreCase(NODE_META)) {
-				readMeta(parser);
-			} else if (name.equalsIgnoreCase(NODE_DATA)) {
-				shares = readData(parser);
-			} else {
-				skip(parser);
-			}
-
-		}
-		return shares;
-	}
-
-	/**
-	 * Parse Meta node
-	 * @param parser
-	 * @throws XmlPullParserException
-	 * @throws IOException
-	 */
-	private void readMeta(XmlPullParser parser) throws XmlPullParserException, IOException {
-		parser.require(XmlPullParser.START_TAG, ns, NODE_META);
-		//Log_OC.d(TAG, "---- NODE META ---");
-		while (parser.next() != XmlPullParser.END_TAG) {
-			if (parser.getEventType() != XmlPullParser.START_TAG) {
-				continue;
-			}
-			String name = parser.getName();
-
-			if  (name.equalsIgnoreCase(NODE_STATUS)) {
-				setStatus(readNode(parser, NODE_STATUS));
-
-			} else if (name.equalsIgnoreCase(NODE_STATUS_CODE)) {
-				setStatusCode(Integer.parseInt(readNode(parser, NODE_STATUS_CODE)));
-
-			} else if (name.equalsIgnoreCase(NODE_MESSAGE)) {
-				setMessage(readNode(parser, NODE_MESSAGE));
-
-			} else {
-				skip(parser);
-			}
-
-		}
-	}
-
-	/**
-	 * Parse Data node
-	 * @param parser
-	 * @return
-	 * @throws XmlPullParserException
-	 * @throws IOException
-	 */
-	private ArrayList<OCShare> readData(XmlPullParser parser) throws XmlPullParserException,
-			IOException {
-		ArrayList<OCShare> shares = new ArrayList<OCShare>();
-		OCShare share = null;
-
-		parser.require(XmlPullParser.START_TAG, ns, NODE_DATA);
-		//Log_OC.d(TAG, "---- NODE DATA ---");
-		while (parser.next() != XmlPullParser.END_TAG) {
-			if (parser.getEventType() != XmlPullParser.START_TAG) {
-				continue;
-			}
-			String name = parser.getName();
-			if (name.equalsIgnoreCase(NODE_ELEMENT)) {
-				readElement(parser, shares);
-
-			}  else if (name.equalsIgnoreCase(NODE_ID)) {// Parse Create XML Response
-				share = new OCShare();
-				String value = readNode(parser, NODE_ID);
-				share.setIdRemoteShared(Integer.parseInt(value));
-
-			} else if (name.equalsIgnoreCase(NODE_URL)) {
-				// NOTE: this field is received in all the public shares from OC 9.0.0
-				// in previous versions, it's received in the result of POST requests, but not
-				// in GET requests
-				share.setShareType(ShareType.PUBLIC_LINK);
-				String value = readNode(parser, NODE_URL);
-				share.setShareLink(value);
-
-			}  else if (name.equalsIgnoreCase(NODE_TOKEN)) {
-				share.setToken(readNode(parser, NODE_TOKEN));
-
-			} else {
-				skip(parser);
-
-			}
-		}
-
-		if (share != null) {
-			// this is the response of a request for creation; don't pass to isValidShare()
-			shares.add(share);
-		}
-
-		return shares;
-
-	}
-
-
-	/**
-	 * Parse Element node
-	 * @param parser
-	 * @return
-	 * @throws XmlPullParserException
-	 * @throws IOException
-	 */
-	private void readElement(XmlPullParser parser, ArrayList<OCShare> shares)
-			throws XmlPullParserException, IOException {
-		parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT);
-
-		OCShare share = new OCShare();
-
-		//Log_OC.d(TAG, "---- NODE ELEMENT ---");
-		while (parser.next() != XmlPullParser.END_TAG) {
-			if (parser.getEventType() != XmlPullParser.START_TAG) {
-				continue;
-			}
-
-			String name = parser.getName();
-
-			if (name.equalsIgnoreCase(NODE_ELEMENT)) {
-				// patch to work around servers responding with extra <element> surrounding all
-				// the shares on the same file before
-				// https://github.com/owncloud/core/issues/6992 was fixed
-				readElement(parser, shares);
-
-			} else if (name.equalsIgnoreCase(NODE_ID)) {
-				share.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID)));
-
-			} else if (name.equalsIgnoreCase(NODE_ITEM_TYPE)) {
-				share.setIsFolder(readNode(parser, NODE_ITEM_TYPE).equalsIgnoreCase(TYPE_FOLDER));
-				fixPathForFolder(share);
-
-			} else if (name.equalsIgnoreCase(NODE_ITEM_SOURCE)) {
-				share.setItemSource(Long.parseLong(readNode(parser, NODE_ITEM_SOURCE)));
-
-			} else if (name.equalsIgnoreCase(NODE_PARENT)) {
-				readNode(parser, NODE_PARENT);
-
-			} else if (name.equalsIgnoreCase(NODE_SHARE_TYPE)) {
-				int value = Integer.parseInt(readNode(parser, NODE_SHARE_TYPE));
-				share.setShareType(ShareType.fromValue(value));
-
-			} else if (name.equalsIgnoreCase(NODE_SHARE_WITH)) {
-				share.setShareWith(readNode(parser, NODE_SHARE_WITH));
-
-			} else if (name.equalsIgnoreCase(NODE_FILE_SOURCE)) {
-				share.setFileSource(Long.parseLong(readNode(parser, NODE_FILE_SOURCE)));
-
-			} else if (name.equalsIgnoreCase(NODE_PATH)) {
-				share.setPath(readNode(parser, NODE_PATH));
-				fixPathForFolder(share);
-
-			} else if (name.equalsIgnoreCase(NODE_PERMISSIONS)) {
-				share.setPermissions(Integer.parseInt(readNode(parser, NODE_PERMISSIONS)));
-
-			} else if (name.equalsIgnoreCase(NODE_STIME)) {
-				share.setSharedDate(Long.parseLong(readNode(parser, NODE_STIME)));
-
-			} else if (name.equalsIgnoreCase(NODE_EXPIRATION)) {
-				String value = readNode(parser, NODE_EXPIRATION);
-				if (!(value.length() == 0)) {
-					share.setExpirationDate(WebdavUtils.parseResponseDate(value).getTime());
-				}
-
-			} else if (name.equalsIgnoreCase(NODE_TOKEN)) {
-				share.setToken(readNode(parser, NODE_TOKEN));
-
-			} else if (name.equalsIgnoreCase(NODE_STORAGE)) {
-				readNode(parser, NODE_STORAGE);
-			} else if (name.equalsIgnoreCase(NODE_MAIL_SEND)) {
-				readNode(parser, NODE_MAIL_SEND);
-
-			} else if (name.equalsIgnoreCase(NODE_SHARE_WITH_DISPLAY_NAME)) {
-				share.setSharedWithDisplayName(readNode(parser, NODE_SHARE_WITH_DISPLAY_NAME));
-
-			} else if (name.equalsIgnoreCase(NODE_SHARE_WITH_ADDITIONAL_INFO)) {
-				share.setSharedWithAdditionalInfo(readNode(parser, NODE_SHARE_WITH_ADDITIONAL_INFO));
-
-			} else if (name.equalsIgnoreCase(NODE_URL)) {
-				String value = readNode(parser, NODE_URL);
-				share.setShareLink(value);
-
-			} else if (name.equalsIgnoreCase(NODE_NAME)) {
-				share.setName(readNode(parser, NODE_NAME));
-
-			} else {
-				skip(parser);
-			}
-		}
-
-		if (isValidShare(share)) {
-			shares.add(share);
-		}
-	}
-
-	private boolean isValidShare(OCShare share) {
-		return (share.getRemoteId() > -1);
-	}
-
-	private void fixPathForFolder(OCShare share) {
-		if (share.isFolder() && share.getPath() != null && share.getPath().length() > 0 &&
-				!share.getPath().endsWith(FileUtils.PATH_SEPARATOR)) {
-			share.setPath(share.getPath() + FileUtils.PATH_SEPARATOR);
-		}
-	}
-
-	/**
-	 * Parse a node, to obtain its text. Needs readText method
-	 * @param parser
-	 * @param node
-	 * @return Text of the node
-	 * @throws XmlPullParserException
-	 * @throws IOException
-	 */
-	private String readNode (XmlPullParser parser, String node) throws XmlPullParserException,
-			IOException{
-		parser.require(XmlPullParser.START_TAG, ns, node);
-		String value = readText(parser);
-		//Log_OC.d(TAG, "node= " + node + ", value= " + value);
-		parser.require(XmlPullParser.END_TAG, ns, node);
-		return value;
-	}
-
-	/**
-	 * Read the text from a node
-	 * @param parser
-	 * @return Text of the node
-	 * @throws IOException
-	 * @throws XmlPullParserException
-	 */
-	private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
-		String result = "";
-		if (parser.next() == XmlPullParser.TEXT) {
-			result = parser.getText();
-			parser.nextTag();
-		}
-		return result;
-	}
-
-	/**
-	 * Skip tags in parser procedure
-	 * @param parser
-	 * @throws XmlPullParserException
-	 * @throws IOException
-	 */
-	private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
-		if (parser.getEventType() != XmlPullParser.START_TAG) {
-			throw new IllegalStateException();
-		}
-		int depth = 1;
-		while (depth != 0) {
-			switch (parser.next()) {
-				case XmlPullParser.END_TAG:
-					depth--;
-					break;
-				case XmlPullParser.START_TAG:
-					depth++;
-					break;
-			}
-		}
-	}
+    //private static final String TAG = ShareXMLParser.class.getSimpleName();
+
+    // No namespaces
+    private static final String ns = null;
+
+    // NODES for XML Parser
+    private static final String NODE_OCS = "ocs";
+
+    private static final String NODE_META = "meta";
+    private static final String NODE_STATUS = "status";
+    private static final String NODE_STATUS_CODE = "statuscode";
+    private static final String NODE_MESSAGE = "message";
+
+    private static final String NODE_DATA = "data";
+    private static final String NODE_ELEMENT = "element";
+    private static final String NODE_ID = "id";
+    private static final String NODE_ITEM_TYPE = "item_type";
+    private static final String NODE_ITEM_SOURCE = "item_source";
+    private static final String NODE_PARENT = "parent";
+    private static final String NODE_SHARE_TYPE = "share_type";
+    private static final String NODE_SHARE_WITH = "share_with";
+    private static final String NODE_FILE_SOURCE = "file_source";
+    private static final String NODE_PATH = "path";
+    private static final String NODE_PERMISSIONS = "permissions";
+    private static final String NODE_STIME = "stime";
+    private static final String NODE_EXPIRATION = "expiration";
+    private static final String NODE_TOKEN = "token";
+    private static final String NODE_STORAGE = "storage";
+    private static final String NODE_MAIL_SEND = "mail_send";
+    private static final String NODE_SHARE_WITH_DISPLAY_NAME = "share_with_displayname";
+    private static final String NODE_SHARE_WITH_ADDITIONAL_INFO = "share_with_additional_info";
+    private static final String NODE_NAME = "name";
+
+    private static final String NODE_URL = "url";
+
+    private static final String TYPE_FOLDER = "folder";
+
+    private static final int SUCCESS = 200;
+    private static final int ERROR_WRONG_PARAMETER = 400;
+    private static final int ERROR_FORBIDDEN = 403;
+    private static final int ERROR_NOT_FOUND = 404;
+
+    private String mStatus;
+    private int mStatusCode;
+    private String mMessage;
+
+    // Getters and Setters
+    public String getStatus() {
+        return mStatus;
+    }
+
+    public void setStatus(String status) {
+        this.mStatus = status;
+    }
+
+    public int getStatusCode() {
+        return mStatusCode;
+    }
+
+    public void setStatusCode(int statusCode) {
+        this.mStatusCode = statusCode;
+    }
+
+    public String getMessage() {
+        return mMessage;
+    }
+
+    public void setMessage(String message) {
+        this.mMessage = message;
+    }
+
+    // Constructor
+    public ShareXMLParser() {
+        mStatusCode = -1;
+    }
+
+    public boolean isSuccess() {
+        return mStatusCode == SUCCESS;
+    }
+
+    public boolean isForbidden() {
+        return mStatusCode == ERROR_FORBIDDEN;
+    }
+
+    public boolean isNotFound() {
+        return mStatusCode == ERROR_NOT_FOUND;
+    }
+
+    public boolean isWrongParameter() {
+        return mStatusCode == ERROR_WRONG_PARAMETER;
+    }
+
+    /**
+     * Parse is as response of Share API
+     *
+     * @param is
+     * @return List of ShareRemoteFiles
+     * @throws XmlPullParserException
+     * @throws IOException
+     */
+    public ArrayList<OCShare> parseXMLResponse(InputStream is) throws XmlPullParserException,
+            IOException {
+
+        try {
+            // XMLPullParser
+            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
+            factory.setNamespaceAware(true);
+
+            XmlPullParser parser = Xml.newPullParser();
+            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
+            parser.setInput(is, null);
+            parser.nextTag();
+            return readOCS(parser);
+
+        } finally {
+            is.close();
+        }
+    }
+
+    /**
+     * Parse OCS node
+     *
+     * @param parser
+     * @return List of ShareRemoteFiles
+     * @throws XmlPullParserException
+     * @throws IOException
+     */
+    private ArrayList<OCShare> readOCS(XmlPullParser parser) throws XmlPullParserException,
+            IOException {
+        ArrayList<OCShare> shares = new ArrayList<>();
+        parser.require(XmlPullParser.START_TAG, ns, NODE_OCS);
+        while (parser.next() != XmlPullParser.END_TAG) {
+            if (parser.getEventType() != XmlPullParser.START_TAG) {
+                continue;
+            }
+            String name = parser.getName();
+            // read NODE_META and NODE_DATA
+            if (name.equalsIgnoreCase(NODE_META)) {
+                readMeta(parser);
+            } else if (name.equalsIgnoreCase(NODE_DATA)) {
+                shares = readData(parser);
+            } else {
+                skip(parser);
+            }
+
+        }
+        return shares;
+    }
+
+    /**
+     * Parse Meta node
+     *
+     * @param parser
+     * @throws XmlPullParserException
+     * @throws IOException
+     */
+    private void readMeta(XmlPullParser parser) throws XmlPullParserException, IOException {
+        parser.require(XmlPullParser.START_TAG, ns, NODE_META);
+        //Log_OC.d(TAG, "---- NODE META ---");
+        while (parser.next() != XmlPullParser.END_TAG) {
+            if (parser.getEventType() != XmlPullParser.START_TAG) {
+                continue;
+            }
+            String name = parser.getName();
+
+            if (name.equalsIgnoreCase(NODE_STATUS)) {
+                setStatus(readNode(parser, NODE_STATUS));
+
+            } else if (name.equalsIgnoreCase(NODE_STATUS_CODE)) {
+                setStatusCode(Integer.parseInt(readNode(parser, NODE_STATUS_CODE)));
+
+            } else if (name.equalsIgnoreCase(NODE_MESSAGE)) {
+                setMessage(readNode(parser, NODE_MESSAGE));
+
+            } else {
+                skip(parser);
+            }
+
+        }
+    }
+
+    /**
+     * Parse Data node
+     *
+     * @param parser
+     * @return
+     * @throws XmlPullParserException
+     * @throws IOException
+     */
+    private ArrayList<OCShare> readData(XmlPullParser parser) throws XmlPullParserException,
+            IOException {
+        ArrayList<OCShare> shares = new ArrayList<OCShare>();
+        OCShare share = null;
+
+        parser.require(XmlPullParser.START_TAG, ns, NODE_DATA);
+        //Log_OC.d(TAG, "---- NODE DATA ---");
+        while (parser.next() != XmlPullParser.END_TAG) {
+            if (parser.getEventType() != XmlPullParser.START_TAG) {
+                continue;
+            }
+            String name = parser.getName();
+            if (name.equalsIgnoreCase(NODE_ELEMENT)) {
+                readElement(parser, shares);
+
+            } else if (name.equalsIgnoreCase(NODE_ID)) {// Parse Create XML Response
+                share = new OCShare();
+                String value = readNode(parser, NODE_ID);
+                share.setIdRemoteShared(Integer.parseInt(value));
+
+            } else if (name.equalsIgnoreCase(NODE_URL)) {
+                // NOTE: this field is received in all the public shares from OC 9.0.0
+                // in previous versions, it's received in the result of POST requests, but not
+                // in GET requests
+                share.setShareType(ShareType.PUBLIC_LINK);
+                String value = readNode(parser, NODE_URL);
+                share.setShareLink(value);
+
+            } else if (name.equalsIgnoreCase(NODE_TOKEN)) {
+                share.setToken(readNode(parser, NODE_TOKEN));
+
+            } else {
+                skip(parser);
+
+            }
+        }
+
+        if (share != null) {
+            // this is the response of a request for creation; don't pass to isValidShare()
+            shares.add(share);
+        }
+
+        return shares;
+
+    }
+
+
+    /**
+     * Parse Element node
+     *
+     * @param parser
+     * @return
+     * @throws XmlPullParserException
+     * @throws IOException
+     */
+    private void readElement(XmlPullParser parser, ArrayList<OCShare> shares)
+            throws XmlPullParserException, IOException {
+        parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT);
+
+        OCShare share = new OCShare();
+
+        //Log_OC.d(TAG, "---- NODE ELEMENT ---");
+        while (parser.next() != XmlPullParser.END_TAG) {
+            if (parser.getEventType() != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            String name = parser.getName();
+
+            if (name.equalsIgnoreCase(NODE_ELEMENT)) {
+                // patch to work around servers responding with extra <element> surrounding all
+                // the shares on the same file before
+                // https://github.com/owncloud/core/issues/6992 was fixed
+                readElement(parser, shares);
+
+            } else if (name.equalsIgnoreCase(NODE_ID)) {
+                share.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID)));
+
+            } else if (name.equalsIgnoreCase(NODE_ITEM_TYPE)) {
+                share.setIsFolder(readNode(parser, NODE_ITEM_TYPE).equalsIgnoreCase(TYPE_FOLDER));
+                fixPathForFolder(share);
+
+            } else if (name.equalsIgnoreCase(NODE_ITEM_SOURCE)) {
+                share.setItemSource(Long.parseLong(readNode(parser, NODE_ITEM_SOURCE)));
+
+            } else if (name.equalsIgnoreCase(NODE_PARENT)) {
+                readNode(parser, NODE_PARENT);
+
+            } else if (name.equalsIgnoreCase(NODE_SHARE_TYPE)) {
+                int value = Integer.parseInt(readNode(parser, NODE_SHARE_TYPE));
+                share.setShareType(ShareType.fromValue(value));
+
+            } else if (name.equalsIgnoreCase(NODE_SHARE_WITH)) {
+                share.setShareWith(readNode(parser, NODE_SHARE_WITH));
+
+            } else if (name.equalsIgnoreCase(NODE_FILE_SOURCE)) {
+                share.setFileSource(Long.parseLong(readNode(parser, NODE_FILE_SOURCE)));
+
+            } else if (name.equalsIgnoreCase(NODE_PATH)) {
+                share.setPath(readNode(parser, NODE_PATH));
+                fixPathForFolder(share);
+
+            } else if (name.equalsIgnoreCase(NODE_PERMISSIONS)) {
+                share.setPermissions(Integer.parseInt(readNode(parser, NODE_PERMISSIONS)));
+
+            } else if (name.equalsIgnoreCase(NODE_STIME)) {
+                share.setSharedDate(Long.parseLong(readNode(parser, NODE_STIME)));
+
+            } else if (name.equalsIgnoreCase(NODE_EXPIRATION)) {
+                String value = readNode(parser, NODE_EXPIRATION);
+                if (!(value.length() == 0)) {
+                    share.setExpirationDate(WebdavUtils.parseResponseDate(value).getTime());
+                }
+
+            } else if (name.equalsIgnoreCase(NODE_TOKEN)) {
+                share.setToken(readNode(parser, NODE_TOKEN));
+
+            } else if (name.equalsIgnoreCase(NODE_STORAGE)) {
+                readNode(parser, NODE_STORAGE);
+            } else if (name.equalsIgnoreCase(NODE_MAIL_SEND)) {
+                readNode(parser, NODE_MAIL_SEND);
+
+            } else if (name.equalsIgnoreCase(NODE_SHARE_WITH_DISPLAY_NAME)) {
+                share.setSharedWithDisplayName(readNode(parser, NODE_SHARE_WITH_DISPLAY_NAME));
+
+            } else if (name.equalsIgnoreCase(NODE_SHARE_WITH_ADDITIONAL_INFO)) {
+                share.setSharedWithAdditionalInfo(readNode(parser, NODE_SHARE_WITH_ADDITIONAL_INFO));
+
+            } else if (name.equalsIgnoreCase(NODE_URL)) {
+                String value = readNode(parser, NODE_URL);
+                share.setShareLink(value);
+
+            } else if (name.equalsIgnoreCase(NODE_NAME)) {
+                share.setName(readNode(parser, NODE_NAME));
+
+            } else {
+                skip(parser);
+            }
+        }
+
+        if (isValidShare(share)) {
+            shares.add(share);
+        }
+    }
+
+    private boolean isValidShare(OCShare share) {
+        return (share.getRemoteId() > -1);
+    }
+
+    private void fixPathForFolder(OCShare share) {
+        if (share.isFolder() && share.getPath() != null && share.getPath().length() > 0 &&
+                !share.getPath().endsWith(FileUtils.PATH_SEPARATOR)) {
+            share.setPath(share.getPath() + FileUtils.PATH_SEPARATOR);
+        }
+    }
+
+    /**
+     * Parse a node, to obtain its text. Needs readText method
+     *
+     * @param parser
+     * @param node
+     * @return Text of the node
+     * @throws XmlPullParserException
+     * @throws IOException
+     */
+    private String readNode(XmlPullParser parser, String node) throws XmlPullParserException,
+            IOException {
+        parser.require(XmlPullParser.START_TAG, ns, node);
+        String value = readText(parser);
+        //Log_OC.d(TAG, "node= " + node + ", value= " + value);
+        parser.require(XmlPullParser.END_TAG, ns, node);
+        return value;
+    }
+
+    /**
+     * Read the text from a node
+     *
+     * @param parser
+     * @return Text of the node
+     * @throws IOException
+     * @throws XmlPullParserException
+     */
+    private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
+        String result = "";
+        if (parser.next() == XmlPullParser.TEXT) {
+            result = parser.getText();
+            parser.nextTag();
+        }
+        return result;
+    }
+
+    /**
+     * Skip tags in parser procedure
+     *
+     * @param parser
+     * @throws XmlPullParserException
+     * @throws IOException
+     */
+    private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
+        if (parser.getEventType() != XmlPullParser.START_TAG) {
+            throw new IllegalStateException();
+        }
+        int depth = 1;
+        while (depth != 0) {
+            switch (parser.next()) {
+                case XmlPullParser.END_TAG:
+                    depth--;
+                    break;
+                case XmlPullParser.START_TAG:
+                    depth++;
+                    break;
+            }
+        }
+    }
 }
\ No newline at end of file