1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 16:06:08 +00:00

Rename OCShare to RemoteShare

This commit is contained in:
davigonz 2019-01-03 14:33:03 +01:00
parent f11cab39bb
commit 54283c0ba9
7 changed files with 335 additions and 354 deletions

View File

@ -214,7 +214,7 @@ public class CreateRemoteShareOperation extends RemoteOperation {
if (mPassword != null && mPassword.length() > 0) { if (mPassword != null && mPassword.length() > 0) {
formBodyBuilder.add(PARAM_PASSWORD, mPassword); formBodyBuilder.add(PARAM_PASSWORD, mPassword);
} }
if (OCShare.DEFAULT_PERMISSION != mPermissions) { if (RemoteShare.DEFAULT_PERMISSION != mPermissions) {
formBodyBuilder.add(PARAM_PERMISSIONS, Integer.toString(mPermissions)); formBodyBuilder.add(PARAM_PERMISSIONS, Integer.toString(mPermissions));
} }
@ -245,7 +245,7 @@ public class CreateRemoteShareOperation extends RemoteOperation {
// TODO Use executeHttpMethod // TODO Use executeHttpMethod
// retrieve more info - POST only returns the index of the new share // retrieve more info - POST only returns the index of the new share
OCShare emptyShare = result.getData().getShares().get(0); RemoteShare emptyShare = result.getData().getShares().get(0);
GetRemoteShareOperation getInfo = new GetRemoteShareOperation( GetRemoteShareOperation getInfo = new GetRemoteShareOperation(
emptyShare.getRemoteId() emptyShare.getRemoteId()
); );

View File

@ -34,6 +34,7 @@ import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.files.FileUtils; import com.owncloud.android.lib.resources.files.FileUtils;
/** /**
* Contains the data of a Share from the Share API * Contains the data of a Share from the Share API
* *
@ -41,7 +42,14 @@ import com.owncloud.android.lib.resources.files.FileUtils;
* @author David A. Velasco * @author David A. Velasco
* @author David González Verdugo * @author David González Verdugo
*/ */
public class OCShare implements Parcelable, Serializable { public class RemoteShare implements Parcelable, Serializable {
/**
* Generated - should be refreshed every time the class changes!!
*/
private static final long serialVersionUID = 4124975224281327921L;
private static final String TAG = RemoteShare.class.getSimpleName();
/** /**
* Generated - should be refreshed every time the class changes!! * Generated - should be refreshed every time the class changes!!
@ -80,7 +88,6 @@ public class OCShare implements Parcelable, Serializable {
FEDERATED_PERMISSIONS_FOR_FOLDER_UP_TO_OC9 + FEDERATED_PERMISSIONS_FOR_FOLDER_UP_TO_OC9 +
SHARE_PERMISSION_FLAG; SHARE_PERMISSION_FLAG;
private long mId;
private long mFileSource; private long mFileSource;
private long mItemSource; private long mItemSource;
private ShareType mShareType; private ShareType mShareType;
@ -98,16 +105,16 @@ public class OCShare implements Parcelable, Serializable {
private long mRemoteId; private long mRemoteId;
private String mShareLink; private String mShareLink;
public OCShare() { public RemoteShare() {
super(); super();
resetData(); resetData();
} }
public OCShare(String path) { public RemoteShare(String path) {
resetData(); resetData();
if (path == null || path.length() <= 0 || !path.startsWith(FileUtils.PATH_SEPARATOR)) { if (path == null || path.length() <= 0 || !path.startsWith(FileUtils.PATH_SEPARATOR)) {
Log_OC.e(TAG, "Trying to create a OCShare with a non valid path"); Log_OC.e(TAG, "Trying to create a RemoteShare with a non valid path");
throw new IllegalArgumentException("Trying to create a OCShare with a non valid path: " + path); throw new IllegalArgumentException("Trying to create a RemoteShare with a non valid path: " + path);
} }
mPath = path; mPath = path;
} }
@ -116,7 +123,6 @@ public class OCShare implements Parcelable, Serializable {
* Used internally. Reset all file properties * Used internally. Reset all file properties
*/ */
private void resetData() { private void resetData() {
mId = -1;
mFileSource = 0; mFileSource = 0;
mItemSource = 0; mItemSource = 0;
mShareType = ShareType.NO_SHARED; mShareType = ShareType.NO_SHARED;
@ -136,15 +142,6 @@ public class OCShare implements Parcelable, Serializable {
} }
/// Getters and Setters /// Getters and Setters
public long getId() {
return mId;
}
public void setId(long id) {
mId = id;
}
public long getFileSource() { public long getFileSource() {
return mFileSource; return mFileSource;
} }
@ -280,15 +277,15 @@ public class OCShare implements Parcelable, Serializable {
/** /**
* Parcelable Methods * Parcelable Methods
*/ */
public static final Parcelable.Creator<OCShare> CREATOR = new Parcelable.Creator<OCShare>() { public static final Parcelable.Creator<RemoteShare> CREATOR = new Parcelable.Creator<RemoteShare>() {
@Override @Override
public OCShare createFromParcel(Parcel source) { public RemoteShare createFromParcel(Parcel source) {
return new OCShare(source); return new RemoteShare(source);
} }
@Override @Override
public OCShare[] newArray(int size) { public RemoteShare[] newArray(int size) {
return new OCShare[size]; return new RemoteShare[size];
} }
}; };
@ -297,13 +294,11 @@ public class OCShare implements Parcelable, Serializable {
* *
* @param source The source parcel * @param source The source parcel
*/ */
protected OCShare(Parcel source) { protected RemoteShare(Parcel source) {
readFromParcel(source); readFromParcel(source);
} }
public void readFromParcel(Parcel source) { public void readFromParcel(Parcel source) {
mId = source.readLong();
mFileSource = source.readLong(); mFileSource = source.readLong();
mItemSource = source.readLong(); mItemSource = source.readLong();
try { try {
@ -335,7 +330,6 @@ public class OCShare implements Parcelable, Serializable {
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(mId);
dest.writeLong(mFileSource); dest.writeLong(mFileSource);
dest.writeLong(mItemSource); dest.writeLong(mItemSource);
dest.writeString((mShareType == null) ? "" : mShareType.name()); dest.writeString((mShareType == null) ? "" : mShareType.name());
@ -353,4 +347,4 @@ public class OCShare implements Parcelable, Serializable {
dest.writeString(mShareLink); dest.writeString(mShareLink);
dest.writeString(mName); dest.writeString(mName);
} }
} }

View File

@ -28,15 +28,15 @@ package com.owncloud.android.lib.resources.shares;
import java.util.ArrayList; import java.util.ArrayList;
public class ShareParserResult { public class ShareParserResult {
private ArrayList<OCShare> shares; private ArrayList<RemoteShare> shares;
private String parserMessage; private String parserMessage;
public ShareParserResult(ArrayList<OCShare> shares, String parserMessage) { public ShareParserResult(ArrayList<RemoteShare> shares, String parserMessage) {
this.shares = shares; this.shares = shares;
this.parserMessage = parserMessage; this.parserMessage = parserMessage;
} }
public ArrayList<OCShare> getShares() { public ArrayList<RemoteShare> getShares() {
return shares; return shares;
} }

View File

@ -31,10 +31,8 @@ package com.owncloud.android.lib.resources.shares;
*/ */
public class SharePermissionsBuilder { public class SharePermissionsBuilder {
/** /** Set of permissions */
* Set of permissions private int mPermissions = RemoteShare.READ_PERMISSION_FLAG; // READ is minimum permission
*/
private int mPermissions = OCShare.READ_PERMISSION_FLAG; // READ is minimum permission
/** /**
* Sets or clears permission to reshare a file or folder. * Sets or clears permission to reshare a file or folder.
@ -43,7 +41,7 @@ public class SharePermissionsBuilder {
* @return Instance to builder itself, to allow consecutive calls to setters * @return Instance to builder itself, to allow consecutive calls to setters
*/ */
public SharePermissionsBuilder setSharePermission(boolean enabled) { public SharePermissionsBuilder setSharePermission(boolean enabled) {
updatePermission(OCShare.SHARE_PERMISSION_FLAG, enabled); updatePermission(RemoteShare.SHARE_PERMISSION_FLAG, enabled);
return this; return this;
} }
@ -54,7 +52,7 @@ public class SharePermissionsBuilder {
* @return Instance to builder itself, to allow consecutive calls to setters * @return Instance to builder itself, to allow consecutive calls to setters
*/ */
public SharePermissionsBuilder setUpdatePermission(boolean enabled) { public SharePermissionsBuilder setUpdatePermission(boolean enabled) {
updatePermission(OCShare.UPDATE_PERMISSION_FLAG, enabled); updatePermission(RemoteShare.UPDATE_PERMISSION_FLAG, enabled);
return this; return this;
} }
@ -65,7 +63,7 @@ public class SharePermissionsBuilder {
* @return Instance to builder itself, to allow consecutive calls to setters * @return Instance to builder itself, to allow consecutive calls to setters
*/ */
public SharePermissionsBuilder setCreatePermission(boolean enabled) { public SharePermissionsBuilder setCreatePermission(boolean enabled) {
updatePermission(OCShare.CREATE_PERMISSION_FLAG, enabled); updatePermission(RemoteShare.CREATE_PERMISSION_FLAG, enabled);
return this; return this;
} }
@ -76,7 +74,7 @@ public class SharePermissionsBuilder {
* @return Instance to builder itself, to allow consecutive calls to setters * @return Instance to builder itself, to allow consecutive calls to setters
*/ */
public SharePermissionsBuilder setDeletePermission(boolean enabled) { public SharePermissionsBuilder setDeletePermission(boolean enabled) {
updatePermission(OCShare.DELETE_PERMISSION_FLAG, enabled); updatePermission(RemoteShare.DELETE_PERMISSION_FLAG, enabled);
return this; return this;
} }

View File

@ -71,7 +71,7 @@ public class ShareToRemoteOperationResultParser {
} }
RemoteOperationResult<ShareParserResult> result; RemoteOperationResult<ShareParserResult> result;
final ArrayList<OCShare> resultData = new ArrayList<>(); final ArrayList<RemoteShare> resultData = new ArrayList<>();
try { try {
// Parse xml response and obtain the list of shares // Parse xml response and obtain the list of shares
@ -80,13 +80,13 @@ public class ShareToRemoteOperationResultParser {
Log_OC.w(TAG, "No ShareXmlParser provided, creating new instance "); Log_OC.w(TAG, "No ShareXmlParser provided, creating new instance ");
mShareXmlParser = new ShareXMLParser(); mShareXmlParser = new ShareXMLParser();
} }
List<OCShare> shares = mShareXmlParser.parseXMLResponse(is); List<RemoteShare> shares = mShareXmlParser.parseXMLResponse(is);
if (mShareXmlParser.isSuccess()) { if (mShareXmlParser.isSuccess()) {
if ((shares != null && shares.size() > 0) || !mOneOrMoreSharesRequired) { if ((shares != null && shares.size() > 0) || !mOneOrMoreSharesRequired) {
result = new RemoteOperationResult<>(RemoteOperationResult.ResultCode.OK); result = new RemoteOperationResult<>(RemoteOperationResult.ResultCode.OK);
if (shares != null) { if (shares != null) {
for (OCShare share : shares) { for (RemoteShare share : shares) {
resultData.add(share); resultData.add(share);
// build the share link if not in the response // build the share link if not in the response
// (needed for OC servers < 9.0.0, see ShareXMLParser.java#line256) // (needed for OC servers < 9.0.0, see ShareXMLParser.java#line256)

View File

@ -78,375 +78,364 @@ public class ShareXMLParser {
private static final String NODE_SHARE_WITH_DISPLAY_NAME = "share_with_displayname"; 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_SHARE_WITH_ADDITIONAL_INFO = "share_with_additional_info";
private static final String NODE_NAME = "name"; private static final String NODE_NAME = "name";
private static final String NODE_URL = "url";
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 static final String TYPE_FOLDER = "folder"; private String mStatus;
private int mStatusCode;
private String mMessage;
private static final int SUCCESS = 200; // Getters and Setters
private static final int ERROR_WRONG_PARAMETER = 400; public String getStatus() {
private static final int ERROR_FORBIDDEN = 403; return mStatus;
private static final int ERROR_NOT_FOUND = 404; }
private String mStatus; public void setStatus(String status) {
private int mStatusCode; this.mStatus = status;
private String mMessage; }
// Getters and Setters public int getStatusCode() {
public String getStatus() { return mStatusCode;
return mStatus; }
}
public void setStatus(String status) { public void setStatusCode(int statusCode) {
this.mStatus = status; this.mStatusCode = statusCode;
} }
public int getStatusCode() { public String getMessage() {
return mStatusCode; return mMessage;
} }
public void setStatusCode(int statusCode) { public void setMessage(String message) {
this.mStatusCode = statusCode; this.mMessage = message;
} }
public String getMessage() { // Constructor
return mMessage; public ShareXMLParser() {
} mStatusCode = -1;
}
public void setMessage(String message) { public boolean isSuccess() {
this.mMessage = message; return mStatusCode == SUCCESS;
} }
// Constructor public boolean isForbidden() {
public ShareXMLParser() { return mStatusCode == ERROR_FORBIDDEN;
mStatusCode = -1; }
}
public boolean isSuccess() { public boolean isNotFound() {
return mStatusCode == SUCCESS; return mStatusCode == ERROR_NOT_FOUND;
} }
public boolean isForbidden() { public boolean isWrongParameter() {
return mStatusCode == ERROR_FORBIDDEN; return mStatusCode == ERROR_WRONG_PARAMETER;
} }
public boolean isNotFound() { /**
return mStatusCode == ERROR_NOT_FOUND; * Parse is as response of Share API
} * @param is
* @return List of ShareRemoteFiles
* @throws XmlPullParserException
* @throws IOException
*/
public ArrayList<RemoteShare> parseXMLResponse(InputStream is) throws XmlPullParserException,
IOException {
public boolean isWrongParameter() { try {
return mStatusCode == ERROR_WRONG_PARAMETER; // XMLPullParser
} XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
/** XmlPullParser parser = Xml.newPullParser();
* Parse is as response of Share API parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
* parser.setInput(is, null);
* @param is parser.nextTag();
* @return List of ShareRemoteFiles return readOCS(parser);
* @throws XmlPullParserException
* @throws IOException
*/
public ArrayList<OCShare> parseXMLResponse(InputStream is) throws XmlPullParserException,
IOException {
try { } finally {
// XMLPullParser is.close();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); }
factory.setNamespaceAware(true); }
XmlPullParser parser = Xml.newPullParser(); /**
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); * Parse OCS node
parser.setInput(is, null); * @param parser
parser.nextTag(); * @return List of ShareRemoteFiles
return readOCS(parser); * @throws XmlPullParserException
* @throws IOException
*/
private ArrayList<RemoteShare> readOCS (XmlPullParser parser) throws XmlPullParserException,
IOException {
ArrayList<RemoteShare> 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);
}
} finally { }
is.close(); return shares;
} }
}
/** /**
* Parse OCS node * Parse Meta node
* * @param parser
* @param parser * @throws XmlPullParserException
* @return List of ShareRemoteFiles * @throws IOException
* @throws XmlPullParserException */
* @throws IOException private void readMeta(XmlPullParser parser) throws XmlPullParserException, IOException {
*/ parser.require(XmlPullParser.START_TAG, ns, NODE_META);
private ArrayList<OCShare> readOCS(XmlPullParser parser) throws XmlPullParserException, //Log_OC.d(TAG, "---- NODE META ---");
IOException { while (parser.next() != XmlPullParser.END_TAG) {
ArrayList<OCShare> shares = new ArrayList<>(); if (parser.getEventType() != XmlPullParser.START_TAG) {
parser.require(XmlPullParser.START_TAG, ns, NODE_OCS); continue;
while (parser.next() != XmlPullParser.END_TAG) { }
if (parser.getEventType() != XmlPullParser.START_TAG) { String name = parser.getName();
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);
}
} if (name.equalsIgnoreCase(NODE_STATUS)) {
return shares; setStatus(readNode(parser, NODE_STATUS));
}
/** } else if (name.equalsIgnoreCase(NODE_STATUS_CODE)) {
* Parse Meta node setStatusCode(Integer.parseInt(readNode(parser, NODE_STATUS_CODE)));
*
* @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)) { } else if (name.equalsIgnoreCase(NODE_MESSAGE)) {
setStatus(readNode(parser, NODE_STATUS)); setMessage(readNode(parser, NODE_MESSAGE));
} else if (name.equalsIgnoreCase(NODE_STATUS_CODE)) { } else {
setStatusCode(Integer.parseInt(readNode(parser, NODE_STATUS_CODE))); skip(parser);
}
} 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<RemoteShare> readData(XmlPullParser parser) throws XmlPullParserException,
IOException {
ArrayList<RemoteShare> shares = new ArrayList<RemoteShare>();
RemoteShare 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 RemoteShare();
String value = readNode(parser, NODE_ID);
share.setIdRemoteShared(Integer.parseInt(value));
/** } else if (name.equalsIgnoreCase(NODE_URL)) {
* Parse Data node // 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
* @param parser // in GET requests
* @return share.setShareType(ShareType.PUBLIC_LINK);
* @throws XmlPullParserException String value = readNode(parser, NODE_URL);
* @throws IOException share.setShareLink(value);
*/
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); } else if (name.equalsIgnoreCase(NODE_TOKEN)) {
//Log_OC.d(TAG, "---- NODE DATA ---"); share.setToken(readNode(parser, NODE_TOKEN));
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 } else {
share = new OCShare(); skip(parser);
String value = readNode(parser, NODE_ID);
share.setIdRemoteShared(Integer.parseInt(value)); }
}
if (share != null) {
// this is the response of a request for creation; don't pass to isValidShare()
shares.add(share);
}
} else if (name.equalsIgnoreCase(NODE_URL)) { return shares;
// 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 * Parse Element node
* * @param parser
* @param parser * @return
* @return * @throws XmlPullParserException
* @throws XmlPullParserException * @throws IOException
* @throws IOException */
*/ private void readElement(XmlPullParser parser, ArrayList<RemoteShare> shares)
private void readElement(XmlPullParser parser, ArrayList<OCShare> shares) throws XmlPullParserException, IOException {
throws XmlPullParserException, IOException { parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT);
parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT);
RemoteShare share = new RemoteShare();
//Log_OC.d(TAG, "---- NODE ELEMENT ---");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
OCShare share = new OCShare(); 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);
//Log_OC.d(TAG, "---- NODE ELEMENT ---"); } else if (name.equalsIgnoreCase(NODE_ID)) {
while (parser.next() != XmlPullParser.END_TAG) { share.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID)));
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName(); } else if (name.equalsIgnoreCase(NODE_ITEM_TYPE)) {
share.setIsFolder(readNode(parser, NODE_ITEM_TYPE).equalsIgnoreCase(TYPE_FOLDER));
fixPathForFolder(share);
if (name.equalsIgnoreCase(NODE_ELEMENT)) { } else if (name.equalsIgnoreCase(NODE_ITEM_SOURCE)) {
// patch to work around servers responding with extra <element> surrounding all share.setItemSource(Long.parseLong(readNode(parser, NODE_ITEM_SOURCE)));
// 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)) { } else if (name.equalsIgnoreCase(NODE_PARENT)) {
share.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID))); readNode(parser, NODE_PARENT);
} else if (name.equalsIgnoreCase(NODE_ITEM_TYPE)) { } else if (name.equalsIgnoreCase(NODE_SHARE_TYPE)) {
share.setIsFolder(readNode(parser, NODE_ITEM_TYPE).equalsIgnoreCase(TYPE_FOLDER)); int value = Integer.parseInt(readNode(parser, NODE_SHARE_TYPE));
fixPathForFolder(share); share.setShareType(ShareType.fromValue(value));
} else if (name.equalsIgnoreCase(NODE_ITEM_SOURCE)) { } else if (name.equalsIgnoreCase(NODE_SHARE_WITH)) {
share.setItemSource(Long.parseLong(readNode(parser, NODE_ITEM_SOURCE))); share.setShareWith(readNode(parser, NODE_SHARE_WITH));
} else if (name.equalsIgnoreCase(NODE_PARENT)) { } else if (name.equalsIgnoreCase(NODE_FILE_SOURCE)) {
readNode(parser, NODE_PARENT); share.setFileSource(Long.parseLong(readNode(parser, NODE_FILE_SOURCE)));
} else if (name.equalsIgnoreCase(NODE_SHARE_TYPE)) { } else if (name.equalsIgnoreCase(NODE_PATH)) {
int value = Integer.parseInt(readNode(parser, NODE_SHARE_TYPE)); share.setPath(readNode(parser, NODE_PATH));
share.setShareType(ShareType.fromValue(value)); fixPathForFolder(share);
} else if (name.equalsIgnoreCase(NODE_SHARE_WITH)) { } else if (name.equalsIgnoreCase(NODE_PERMISSIONS)) {
share.setShareWith(readNode(parser, NODE_SHARE_WITH)); share.setPermissions(Integer.parseInt(readNode(parser, NODE_PERMISSIONS)));
} else if (name.equalsIgnoreCase(NODE_FILE_SOURCE)) { } else if (name.equalsIgnoreCase(NODE_STIME)) {
share.setFileSource(Long.parseLong(readNode(parser, NODE_FILE_SOURCE))); share.setSharedDate(Long.parseLong(readNode(parser, NODE_STIME)));
} else if (name.equalsIgnoreCase(NODE_PATH)) { } else if (name.equalsIgnoreCase(NODE_EXPIRATION)) {
share.setPath(readNode(parser, NODE_PATH)); String value = readNode(parser, NODE_EXPIRATION);
fixPathForFolder(share); if (!(value.length() == 0)) {
share.setExpirationDate(WebdavUtils.parseResponseDate(value).getTime());
}
} else if (name.equalsIgnoreCase(NODE_PERMISSIONS)) { } else if (name.equalsIgnoreCase(NODE_TOKEN)) {
share.setPermissions(Integer.parseInt(readNode(parser, NODE_PERMISSIONS))); share.setToken(readNode(parser, NODE_TOKEN));
} else if (name.equalsIgnoreCase(NODE_STIME)) { } else if (name.equalsIgnoreCase(NODE_STORAGE)) {
share.setSharedDate(Long.parseLong(readNode(parser, NODE_STIME))); readNode(parser, NODE_STORAGE);
} else if (name.equalsIgnoreCase(NODE_MAIL_SEND)) {
readNode(parser, NODE_MAIL_SEND);
} else if (name.equalsIgnoreCase(NODE_EXPIRATION)) { } else if (name.equalsIgnoreCase(NODE_SHARE_WITH_DISPLAY_NAME)) {
String value = readNode(parser, NODE_EXPIRATION); share.setSharedWithDisplayName(readNode(parser, NODE_SHARE_WITH_DISPLAY_NAME));
if (!(value.length() == 0)) {
share.setExpirationDate(WebdavUtils.parseResponseDate(value).getTime());
}
} else if (name.equalsIgnoreCase(NODE_TOKEN)) { } else if (name.equalsIgnoreCase(NODE_URL)) {
share.setToken(readNode(parser, NODE_TOKEN)); String value = readNode(parser, NODE_URL);
share.setShareLink(value);
} 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)) { } else if (name.equalsIgnoreCase(NODE_NAME)) {
share.setName(readNode(parser, NODE_NAME)); share.setName(readNode(parser, NODE_NAME));
} else { } else {
skip(parser); skip(parser);
} }
} }
if (isValidShare(share)) { if (isValidShare(share)) {
shares.add(share); shares.add(share);
} }
} }
private boolean isValidShare(OCShare share) { private boolean isValidShare(RemoteShare share) {
return (share.getRemoteId() > -1); return (share.getRemoteId() > -1);
} }
private void fixPathForFolder(OCShare share) { private void fixPathForFolder(RemoteShare share) {
if (share.isFolder() && share.getPath() != null && share.getPath().length() > 0 && if (share.isFolder() && share.getPath() != null && share.getPath().length() > 0 &&
!share.getPath().endsWith(FileUtils.PATH_SEPARATOR)) { !share.getPath().endsWith(FileUtils.PATH_SEPARATOR)) {
share.setPath(share.getPath() + FileUtils.PATH_SEPARATOR); share.setPath(share.getPath() + FileUtils.PATH_SEPARATOR);
} }
} }
/** /**
* Parse a node, to obtain its text. Needs readText method * Parse a node, to obtain its text. Needs readText method
* * @param parser
* @param parser * @param node
* @param node * @return Text of the node
* @return Text of the node * @throws XmlPullParserException
* @throws XmlPullParserException * @throws IOException
* @throws IOException */
*/ private String readNode (XmlPullParser parser, String node) throws XmlPullParserException,
private String readNode(XmlPullParser parser, String node) throws XmlPullParserException, IOException{
IOException { parser.require(XmlPullParser.START_TAG, ns, node);
parser.require(XmlPullParser.START_TAG, ns, node); String value = readText(parser);
String value = readText(parser); //Log_OC.d(TAG, "node= " + node + ", value= " + value);
//Log_OC.d(TAG, "node= " + node + ", value= " + value); parser.require(XmlPullParser.END_TAG, ns, node);
parser.require(XmlPullParser.END_TAG, ns, node); return value;
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;
}
/** /**
* Read the text from a node * Skip tags in parser procedure
* * @param parser
* @param parser * @throws XmlPullParserException
* @return Text of the node * @throws IOException
* @throws IOException */
* @throws XmlPullParserException private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
*/ if (parser.getEventType() != XmlPullParser.START_TAG) {
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException { throw new IllegalStateException();
String result = ""; }
if (parser.next() == XmlPullParser.TEXT) { int depth = 1;
result = parser.getText(); while (depth != 0) {
parser.nextTag(); switch (parser.next()) {
} case XmlPullParser.END_TAG:
return result; depth--;
} break;
case XmlPullParser.START_TAG:
/** depth++;
* Skip tags in parser procedure break;
* }
* @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;
}
}
}
} }

View File

@ -99,7 +99,7 @@ public class UpdateRemoteShareOperation extends RemoteOperation<ShareParserResul
mPassword = null; // no update mPassword = null; // no update
mExpirationDateInMillis = 0; // no update mExpirationDateInMillis = 0; // no update
mPublicUpload = null; mPublicUpload = null;
mPermissions = OCShare.DEFAULT_PERMISSION; mPermissions = RemoteShare.DEFAULT_PERMISSION;
} }
/** /**