Loading library/src/androidTest/java/com/owncloud/android/lib/resources/tags/GetTagsRemoteOperationIT.kt +57 −0 Original line number Diff line number Diff line Loading @@ -9,8 +9,19 @@ package com.owncloud.android.lib.resources.tags import com.nextcloud.test.RandomStringGenerator import com.owncloud.android.AbstractIT import com.owncloud.android.lib.common.network.WebdavEntry import com.owncloud.android.lib.resources.files.CreateFolderRemoteOperation import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation import com.owncloud.android.lib.resources.files.ReadFolderRemoteOperation import com.owncloud.android.lib.resources.files.model.RemoteFile import junit.framework.TestCase.assertEquals import junit.framework.TestCase.assertTrue import org.apache.commons.httpclient.HttpStatus import org.apache.jackrabbit.webdav.client.methods.PropPatchMethod import org.apache.jackrabbit.webdav.property.DavPropertyNameSet import org.apache.jackrabbit.webdav.property.DavPropertySet import org.apache.jackrabbit.webdav.property.DefaultDavProperty import org.apache.jackrabbit.webdav.xml.Namespace import org.junit.Test class GetTagsRemoteOperationIT : AbstractIT() { Loading @@ -34,5 +45,51 @@ class GetTagsRemoteOperationIT : AbstractIT() { sut = GetTagsRemoteOperation().execute(client) assertTrue(sut.isSuccess) assertEquals(count + 1, sut.resultData.size) // add color to one tag val plainColor = "ff00ff" val colorWithHex = "#$plainColor" val tag = sut.resultData.first() val newProps = DavPropertySet() newProps.add( DefaultDavProperty( "nc:color", plainColor, Namespace.getNamespace(WebdavEntry.NAMESPACE_NC) ) ) val propPatchMethod = PropPatchMethod( client.baseUri.toString() + "/remote.php/dav/systemtags/" + tag.id, newProps, DavPropertyNameSet() ) assertTrue(client.executeMethod(propPatchMethod) == HttpStatus.SC_MULTI_STATUS) sut = GetTagsRemoteOperation().execute(client) assertEquals(colorWithHex, sut.resultData.find { it.id == tag.id }?.color) // add colored tag to file val tagFolder = "/coloredFolder" assertTrue(CreateFolderRemoteOperation(tagFolder, true).execute(client).isSuccess) val folderMetadata = ReadFileRemoteOperation(tagFolder).execute(client) assertTrue( PutTagRemoteOperation( tag.id, (folderMetadata.data[0] as RemoteFile).localId ).execute(nextcloudClient).isSuccess ) // read metadata val rootMetadata = ReadFolderRemoteOperation("/").execute(client) assertEquals( colorWithHex, (rootMetadata.data as ArrayList<RemoteFile>) .find { it.remotePath == tagFolder } ?.tags ?.first() ?.color ) } } library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.kt +15 −13 Original line number Diff line number Diff line Loading @@ -395,8 +395,10 @@ class WebdavEntry constructor( prop = propSet[EXTENDED_PROPERTY_SYSTEM_TAGS, ncNamespace] if (prop?.value != null) { tags = when (prop.value) { is ArrayList<*> -> (prop.value as ArrayList<*>) tags = when (prop.value) { is ArrayList<*> -> (prop.value as ArrayList<*>) .filterIsInstance<Element>() .map { parseTag(it) } .toTypedArray() Loading library/src/main/java/com/owncloud/android/lib/resources/systemTag/SystemTag.kt +4 −1 Original line number Diff line number Diff line Loading @@ -7,4 +7,7 @@ package com.owncloud.android.lib.resources.systemTag data class SystemTag(val name: String, val color: String?) data class SystemTag( val name: String, val color: String? ) library/src/main/java/com/owncloud/android/lib/resources/tags/GetTagsRemoteOperation.kt +16 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ package com.owncloud.android.lib.resources.tags import com.owncloud.android.lib.common.OwnCloudClient import com.owncloud.android.lib.common.network.WebdavEntry.Companion.EXTENDED_PROPERTY_NAME_REMOTE_ID import com.owncloud.android.lib.common.network.WebdavEntry.Companion.EXTENDED_PROPERTY_SYSTEM_TAGS_COLOR import com.owncloud.android.lib.common.network.WebdavEntry.Companion.NAMESPACE_NC import com.owncloud.android.lib.common.network.WebdavEntry.Companion.NAMESPACE_OC import com.owncloud.android.lib.common.network.WebdavEntry.Companion.SHAREES_DISPLAY_NAME import com.owncloud.android.lib.common.operations.RemoteOperation Loading @@ -18,15 +20,18 @@ import org.apache.jackrabbit.webdav.client.methods.PropFindMethod import org.apache.jackrabbit.webdav.property.DavPropertyNameSet import org.apache.jackrabbit.webdav.xml.Namespace @Suppress("NestedBlockDepth") class GetTagsRemoteOperation : RemoteOperation<List<Tag>>() { @Deprecated("Deprecated in Java") override fun run(client: OwnCloudClient): RemoteOperationResult<List<Tag>> { val ocNamespace = Namespace.getNamespace(NAMESPACE_OC) val ncNamespace = Namespace.getNamespace(NAMESPACE_NC) val propSet = DavPropertyNameSet().apply { add(EXTENDED_PROPERTY_NAME_REMOTE_ID, ocNamespace) add(SHAREES_DISPLAY_NAME, ocNamespace) add(EXTENDED_PROPERTY_SYSTEM_TAGS_COLOR, ncNamespace) } val propFindMethod = Loading Loading @@ -55,7 +60,17 @@ class GetTagsRemoteOperation : RemoteOperation<List<Tag>>() { .get(SHAREES_DISPLAY_NAME, ocNamespace) .value as String result.add(Tag(id, name)) var color = it .getProperties(HttpStatus.SC_OK) .get(EXTENDED_PROPERTY_SYSTEM_TAGS_COLOR, ncNamespace) ?.value as String? if (color != null) { color = "#$color" } result.add(Tag(id, name, color)) } } Loading library/src/main/java/com/owncloud/android/lib/resources/tags/Tag.kt +2 −1 Original line number Diff line number Diff line Loading @@ -9,5 +9,6 @@ package com.owncloud.android.lib.resources.tags data class Tag( val id: String, val name: String val name: String, val color: String? ) Loading
library/src/androidTest/java/com/owncloud/android/lib/resources/tags/GetTagsRemoteOperationIT.kt +57 −0 Original line number Diff line number Diff line Loading @@ -9,8 +9,19 @@ package com.owncloud.android.lib.resources.tags import com.nextcloud.test.RandomStringGenerator import com.owncloud.android.AbstractIT import com.owncloud.android.lib.common.network.WebdavEntry import com.owncloud.android.lib.resources.files.CreateFolderRemoteOperation import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation import com.owncloud.android.lib.resources.files.ReadFolderRemoteOperation import com.owncloud.android.lib.resources.files.model.RemoteFile import junit.framework.TestCase.assertEquals import junit.framework.TestCase.assertTrue import org.apache.commons.httpclient.HttpStatus import org.apache.jackrabbit.webdav.client.methods.PropPatchMethod import org.apache.jackrabbit.webdav.property.DavPropertyNameSet import org.apache.jackrabbit.webdav.property.DavPropertySet import org.apache.jackrabbit.webdav.property.DefaultDavProperty import org.apache.jackrabbit.webdav.xml.Namespace import org.junit.Test class GetTagsRemoteOperationIT : AbstractIT() { Loading @@ -34,5 +45,51 @@ class GetTagsRemoteOperationIT : AbstractIT() { sut = GetTagsRemoteOperation().execute(client) assertTrue(sut.isSuccess) assertEquals(count + 1, sut.resultData.size) // add color to one tag val plainColor = "ff00ff" val colorWithHex = "#$plainColor" val tag = sut.resultData.first() val newProps = DavPropertySet() newProps.add( DefaultDavProperty( "nc:color", plainColor, Namespace.getNamespace(WebdavEntry.NAMESPACE_NC) ) ) val propPatchMethod = PropPatchMethod( client.baseUri.toString() + "/remote.php/dav/systemtags/" + tag.id, newProps, DavPropertyNameSet() ) assertTrue(client.executeMethod(propPatchMethod) == HttpStatus.SC_MULTI_STATUS) sut = GetTagsRemoteOperation().execute(client) assertEquals(colorWithHex, sut.resultData.find { it.id == tag.id }?.color) // add colored tag to file val tagFolder = "/coloredFolder" assertTrue(CreateFolderRemoteOperation(tagFolder, true).execute(client).isSuccess) val folderMetadata = ReadFileRemoteOperation(tagFolder).execute(client) assertTrue( PutTagRemoteOperation( tag.id, (folderMetadata.data[0] as RemoteFile).localId ).execute(nextcloudClient).isSuccess ) // read metadata val rootMetadata = ReadFolderRemoteOperation("/").execute(client) assertEquals( colorWithHex, (rootMetadata.data as ArrayList<RemoteFile>) .find { it.remotePath == tagFolder } ?.tags ?.first() ?.color ) } }
library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.kt +15 −13 Original line number Diff line number Diff line Loading @@ -395,8 +395,10 @@ class WebdavEntry constructor( prop = propSet[EXTENDED_PROPERTY_SYSTEM_TAGS, ncNamespace] if (prop?.value != null) { tags = when (prop.value) { is ArrayList<*> -> (prop.value as ArrayList<*>) tags = when (prop.value) { is ArrayList<*> -> (prop.value as ArrayList<*>) .filterIsInstance<Element>() .map { parseTag(it) } .toTypedArray() Loading
library/src/main/java/com/owncloud/android/lib/resources/systemTag/SystemTag.kt +4 −1 Original line number Diff line number Diff line Loading @@ -7,4 +7,7 @@ package com.owncloud.android.lib.resources.systemTag data class SystemTag(val name: String, val color: String?) data class SystemTag( val name: String, val color: String? )
library/src/main/java/com/owncloud/android/lib/resources/tags/GetTagsRemoteOperation.kt +16 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ package com.owncloud.android.lib.resources.tags import com.owncloud.android.lib.common.OwnCloudClient import com.owncloud.android.lib.common.network.WebdavEntry.Companion.EXTENDED_PROPERTY_NAME_REMOTE_ID import com.owncloud.android.lib.common.network.WebdavEntry.Companion.EXTENDED_PROPERTY_SYSTEM_TAGS_COLOR import com.owncloud.android.lib.common.network.WebdavEntry.Companion.NAMESPACE_NC import com.owncloud.android.lib.common.network.WebdavEntry.Companion.NAMESPACE_OC import com.owncloud.android.lib.common.network.WebdavEntry.Companion.SHAREES_DISPLAY_NAME import com.owncloud.android.lib.common.operations.RemoteOperation Loading @@ -18,15 +20,18 @@ import org.apache.jackrabbit.webdav.client.methods.PropFindMethod import org.apache.jackrabbit.webdav.property.DavPropertyNameSet import org.apache.jackrabbit.webdav.xml.Namespace @Suppress("NestedBlockDepth") class GetTagsRemoteOperation : RemoteOperation<List<Tag>>() { @Deprecated("Deprecated in Java") override fun run(client: OwnCloudClient): RemoteOperationResult<List<Tag>> { val ocNamespace = Namespace.getNamespace(NAMESPACE_OC) val ncNamespace = Namespace.getNamespace(NAMESPACE_NC) val propSet = DavPropertyNameSet().apply { add(EXTENDED_PROPERTY_NAME_REMOTE_ID, ocNamespace) add(SHAREES_DISPLAY_NAME, ocNamespace) add(EXTENDED_PROPERTY_SYSTEM_TAGS_COLOR, ncNamespace) } val propFindMethod = Loading Loading @@ -55,7 +60,17 @@ class GetTagsRemoteOperation : RemoteOperation<List<Tag>>() { .get(SHAREES_DISPLAY_NAME, ocNamespace) .value as String result.add(Tag(id, name)) var color = it .getProperties(HttpStatus.SC_OK) .get(EXTENDED_PROPERTY_SYSTEM_TAGS_COLOR, ncNamespace) ?.value as String? if (color != null) { color = "#$color" } result.add(Tag(id, name, color)) } } Loading
library/src/main/java/com/owncloud/android/lib/resources/tags/Tag.kt +2 −1 Original line number Diff line number Diff line Loading @@ -9,5 +9,6 @@ package com.owncloud.android.lib.resources.tags data class Tag( val id: String, val name: String val name: String, val color: String? )