mirror of
https://github.com/owncloud/android-library.git
synced 2025-06-07 16:06:08 +00:00
Remove GetSharesForFileXMLParser
This commit is contained in:
parent
984cbbc124
commit
f166bcdd8b
@ -1,353 +0,0 @@
|
|||||||
/* ownCloud Android Library is available under MIT license
|
|
||||||
* Copyright (C) 2014 ownCloud (http://www.owncloud.org/)
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
||||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
||||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.owncloud.android.lib.utils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
|
||||||
import org.xmlpull.v1.XmlPullParserFactory;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import android.util.Xml;
|
|
||||||
|
|
||||||
import com.owncloud.android.lib.operations.common.OCShare;
|
|
||||||
import com.owncloud.android.lib.operations.common.ShareType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parser for Share API Response: GetSharesForFile Operation
|
|
||||||
* @author masensio
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class GetSharesForFileXMLParser {
|
|
||||||
|
|
||||||
private static final String TAG = GetSharesForFileXMLParser.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_display_name";
|
|
||||||
|
|
||||||
|
|
||||||
private static final String TYPE_FOLDER = "folder";
|
|
||||||
|
|
||||||
|
|
||||||
private String mStatus;
|
|
||||||
private int mStatusCode;
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Constructor
|
|
||||||
public GetSharesForFileXMLParser() {
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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<OCShare>();
|
|
||||||
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.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 {
|
|
||||||
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>();
|
|
||||||
|
|
||||||
parser.require(XmlPullParser.START_TAG, ns, NODE_DATA);
|
|
||||||
Log.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)) {
|
|
||||||
shares.add(readElement(parser));
|
|
||||||
} else {
|
|
||||||
skip(parser);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return shares;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse Element node
|
|
||||||
* @param parser
|
|
||||||
* @return
|
|
||||||
* @throws XmlPullParserException
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
|
||||||
private OCShare readElement(XmlPullParser parser) throws XmlPullParserException, IOException {
|
|
||||||
parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT);
|
|
||||||
|
|
||||||
OCShare share = new OCShare();
|
|
||||||
|
|
||||||
Log.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)) {
|
|
||||||
share = readElement(parser);
|
|
||||||
|
|
||||||
} else if (name.equalsIgnoreCase(NODE_ID)) {
|
|
||||||
share.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID)));
|
|
||||||
|
|
||||||
} else if (name.equalsIgnoreCase(NODE_ITEM_TYPE)) {
|
|
||||||
share.setIsDirectory(readNode(parser, NODE_ITEM_TYPE).equalsIgnoreCase(TYPE_FOLDER));
|
|
||||||
|
|
||||||
} 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));
|
|
||||||
|
|
||||||
} 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.isEmpty()) {
|
|
||||||
share.setExpirationDate(Long.parseLong(readNode(parser, NODE_EXPIRATION))); // check if expiration is in long format or date format
|
|
||||||
}
|
|
||||||
|
|
||||||
} 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 {
|
|
||||||
skip(parser);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return share;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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.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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user