summaryrefslogtreecommitdiff
path: root/ucb/source/ucp/cmis/cmis_url.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'ucb/source/ucp/cmis/cmis_url.cxx')
-rw-r--r--ucb/source/ucp/cmis/cmis_url.cxx87
1 files changed, 36 insertions, 51 deletions
diff --git a/ucb/source/ucp/cmis/cmis_url.cxx b/ucb/source/ucp/cmis/cmis_url.cxx
index df225018d3a9..aed136b3d86a 100644
--- a/ucb/source/ucp/cmis/cmis_url.cxx
+++ b/ucb/source/ucp/cmis/cmis_url.cxx
@@ -28,6 +28,8 @@
#include <libcmis/session-factory.hxx>
+#include <rtl/uri.hxx>
+
#include "cmis_url.hxx"
using namespace std;
@@ -37,42 +39,24 @@ using namespace std;
namespace cmis
{
- URL::URL( rtl::OUString const & urlStr ) :
- m_aUrl( urlStr )
+ URL::URL( rtl::OUString const & urlStr )
{
+ rtl::OUString sBindingUrl;
+ rtl::OUString sRepositoryId;
+
+ INetURLObject aUrl( urlStr );
+
+ // Decode the authority to get the binding URL and repository id
+ rtl::OUString sDecodedHost = aUrl.GetHost( INetURLObject::DECODE_WITH_CHARSET );
+ INetURLObject aHostUrl( sDecodedHost );
+ m_sBindingUrl = aHostUrl.GetURLNoMark( );
+ m_sRepositoryId = aHostUrl.GetMark( );
- rtl::OUString bindingUrl( "http://" );
- bindingUrl += m_aUrl.GetHostPort( );
- bindingUrl += m_aUrl.GetURLPath( );
- m_sBindingUrl = bindingUrl;
-
- // Split the query into bits and locate the repo-id key
- rtl::OUString query = m_aUrl.GetParam( );
- while ( !query.isEmpty() )
- {
- sal_Int32 nPos = query.indexOfAsciiL( "&", 1 );
- rtl::OUString segment;
- if ( nPos > 0 )
- {
- segment = query.copy( 0, nPos );
- query = query.copy( nPos + 1 );
- }
- else
- {
- segment = query;
- query = rtl::OUString();
- }
-
- sal_Int32 nEqPos = segment.indexOfAsciiL( "=", 1 );
- rtl::OUString key = segment.copy( 0, nEqPos );
- rtl::OUString value = segment.copy( nEqPos +1 );
-
- if ( key == "repo-id" )
- m_sRepositoryId = value;
- else
- m_aQuery[key] = value;
- }
+ m_sUser = aUrl.GetUser( );
+ m_sPass = aUrl.GetPass( );
+ // Store the path to the object
+ m_sPath = aUrl.GetURLPath( INetURLObject::DECODE_WITH_CHARSET );
}
map< int, string > URL::getSessionParams( )
@@ -80,19 +64,15 @@ namespace cmis
map< int, string > params;
params[ATOMPUB_URL] = OUSTR_TO_STDSTR( m_sBindingUrl );
params[REPOSITORY_ID] = OUSTR_TO_STDSTR( m_sRepositoryId );
- params[USERNAME] = OUSTR_TO_STDSTR( m_aUrl.GetUser() );
- params[PASSWORD] = OUSTR_TO_STDSTR( m_aUrl.GetPass() );
+ params[USERNAME] = OUSTR_TO_STDSTR( m_sUser );
+ params[PASSWORD] = OUSTR_TO_STDSTR( m_sPass );
return params;
}
- rtl::OUString URL::getObjectId( )
+ rtl::OUString URL::getObjectPath( )
{
- rtl::OUString sResult;
- map< rtl::OUString, rtl::OUString >::iterator it = m_aQuery.find( "id" );
- if ( it != m_aQuery.end( ) )
- sResult = it->second;
- return sResult;
+ return m_sPath;
}
rtl::OUString URL::getBindingUrl( )
@@ -100,21 +80,26 @@ namespace cmis
return m_sBindingUrl;
}
- void URL::setObjectId( rtl::OUString sId )
+ void URL::setObjectPath( rtl::OUString sPath )
{
- m_aQuery["id"] = sId;
- updateUrlQuery( );
+ m_sPath = sPath;
}
rtl::OUString URL::asString( )
{
- return m_aUrl.GetMainURL( INetURLObject::NO_DECODE );
- }
-
- void URL::updateUrlQuery( )
- {
- rtl::OUString sParam = "repo-id=" + m_sRepositoryId + "&id=" + m_aQuery["id"];
- m_aUrl.SetParam( sParam );
+ rtl::OUString sUrl;
+ rtl::OUString sEncodedBinding = rtl::Uri::encode(
+ m_sBindingUrl + "#" + m_sRepositoryId,
+ rtl_UriCharClassUricNoSlash,
+ rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_UTF8 );
+ sUrl = "vnd.libreoffice.cmis+atom://" + sEncodedBinding;
+
+ if ( m_sPath[0] != '/' )
+ sUrl += "/";
+ sUrl += m_sPath;
+
+ return sUrl;
}
}