xref: /trunk/main/svl/source/misc/filenotation.cxx (revision 7950f2af)
140df464eSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
340df464eSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
440df464eSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
540df464eSAndrew Rist  * distributed with this work for additional information
640df464eSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
740df464eSAndrew Rist  * to you under the Apache License, Version 2.0 (the
840df464eSAndrew Rist  * "License"); you may not use this file except in compliance
940df464eSAndrew Rist  * with the License.  You may obtain a copy of the License at
1040df464eSAndrew Rist  *
1140df464eSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1240df464eSAndrew Rist  *
1340df464eSAndrew Rist  * Unless required by applicable law or agreed to in writing,
1440df464eSAndrew Rist  * software distributed under the License is distributed on an
1540df464eSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1640df464eSAndrew Rist  * KIND, either express or implied.  See the License for the
1740df464eSAndrew Rist  * specific language governing permissions and limitations
1840df464eSAndrew Rist  * under the License.
1940df464eSAndrew Rist  *
2040df464eSAndrew Rist  *************************************************************/
2140df464eSAndrew Rist 
2240df464eSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svl.hxx"
26cdf0e10cSrcweir #include <svl/filenotation.hxx>
27cdf0e10cSrcweir #include <osl/file.h>
28cdf0e10cSrcweir #include <osl/diagnose.h>
29cdf0e10cSrcweir #include <tools/urlobj.hxx>
30cdf0e10cSrcweir 
31cdf0e10cSrcweir //.........................................................................
32cdf0e10cSrcweir namespace svt
33cdf0e10cSrcweir {
34cdf0e10cSrcweir //.........................................................................
35cdf0e10cSrcweir 
36cdf0e10cSrcweir 	//=====================================================================
37cdf0e10cSrcweir 	//= OFileNotation
38cdf0e10cSrcweir 	//=====================================================================
39cdf0e10cSrcweir 	//---------------------------------------------------------------------
OFileNotation(const::rtl::OUString & _rUrlOrPath)40cdf0e10cSrcweir 	OFileNotation::OFileNotation( const ::rtl::OUString& _rUrlOrPath )
41cdf0e10cSrcweir 	{
42cdf0e10cSrcweir 		construct( _rUrlOrPath );
43cdf0e10cSrcweir 	}
44cdf0e10cSrcweir 
45cdf0e10cSrcweir 	//---------------------------------------------------------------------
OFileNotation(const::rtl::OUString & _rUrlOrPath,NOTATION _eInputNotation)46cdf0e10cSrcweir 	OFileNotation::OFileNotation( const ::rtl::OUString& _rUrlOrPath, NOTATION _eInputNotation )
47cdf0e10cSrcweir 	{
48cdf0e10cSrcweir         if ( _eInputNotation == N_URL )
49cdf0e10cSrcweir         {
50cdf0e10cSrcweir 		    INetURLObject aParser( _rUrlOrPath );
51cdf0e10cSrcweir 		    if ( aParser.GetProtocol() == INET_PROT_FILE )
52cdf0e10cSrcweir                 implInitWithURLNotation( _rUrlOrPath );
53cdf0e10cSrcweir             else
54cdf0e10cSrcweir 				m_sSystem = m_sFileURL = _rUrlOrPath;
55cdf0e10cSrcweir         }
56cdf0e10cSrcweir         else
57cdf0e10cSrcweir             implInitWithSystemNotation( _rUrlOrPath );
58cdf0e10cSrcweir 	}
59cdf0e10cSrcweir 
60cdf0e10cSrcweir 	//---------------------------------------------------------------------
implInitWithSystemNotation(const::rtl::OUString & _rSystemPath)61cdf0e10cSrcweir 	bool OFileNotation::implInitWithSystemNotation( const ::rtl::OUString& _rSystemPath )
62cdf0e10cSrcweir     {
63cdf0e10cSrcweir         bool bSuccess = false;
64cdf0e10cSrcweir 
65cdf0e10cSrcweir         m_sSystem = _rSystemPath;
66cdf0e10cSrcweir 		if  (  ( osl_File_E_None != osl_getFileURLFromSystemPath( m_sSystem.pData, &m_sFileURL.pData ) )
67cdf0e10cSrcweir             && ( 0 == m_sFileURL.getLength() )
68cdf0e10cSrcweir             )
69cdf0e10cSrcweir 		{
70cdf0e10cSrcweir 			if ( _rSystemPath.getLength() )
71cdf0e10cSrcweir 			{
72cdf0e10cSrcweir 				INetURLObject aSmartParser;
73cdf0e10cSrcweir 				aSmartParser.SetSmartProtocol( INET_PROT_FILE );
74cdf0e10cSrcweir 				if ( aSmartParser.SetSmartURL( _rSystemPath ) )
75cdf0e10cSrcweir 				{
76cdf0e10cSrcweir 					m_sFileURL = aSmartParser.GetMainURL( INetURLObject::NO_DECODE );
77cdf0e10cSrcweir 					osl_getSystemPathFromFileURL( m_sFileURL.pData, &m_sSystem.pData );
78cdf0e10cSrcweir 					bSuccess = true;
79cdf0e10cSrcweir 				}
80cdf0e10cSrcweir 			}
81cdf0e10cSrcweir 		}
82cdf0e10cSrcweir 		else
83cdf0e10cSrcweir 			bSuccess = true;
84cdf0e10cSrcweir         return bSuccess;
85cdf0e10cSrcweir     }
86cdf0e10cSrcweir 
87cdf0e10cSrcweir 	//---------------------------------------------------------------------
implInitWithURLNotation(const::rtl::OUString & _rURL)88cdf0e10cSrcweir 	bool OFileNotation::implInitWithURLNotation( const ::rtl::OUString& _rURL )
89cdf0e10cSrcweir     {
90cdf0e10cSrcweir 		m_sFileURL = _rURL;
91cdf0e10cSrcweir 		osl_getSystemPathFromFileURL( _rURL.pData, &m_sSystem.pData );
92cdf0e10cSrcweir         return true;
93cdf0e10cSrcweir     }
94cdf0e10cSrcweir 
95cdf0e10cSrcweir 	//---------------------------------------------------------------------
construct(const::rtl::OUString & _rUrlOrPath)96cdf0e10cSrcweir 	void OFileNotation::construct( const ::rtl::OUString& _rUrlOrPath )
97cdf0e10cSrcweir 	{
98cdf0e10cSrcweir 		bool bSuccess = false;
99cdf0e10cSrcweir 		// URL notation?
100cdf0e10cSrcweir 		INetURLObject aParser( _rUrlOrPath );
101cdf0e10cSrcweir 		switch ( aParser.GetProtocol() )
102cdf0e10cSrcweir 		{
103cdf0e10cSrcweir 			case INET_PROT_FILE:
104cdf0e10cSrcweir 				// file URL
105cdf0e10cSrcweir 				bSuccess = implInitWithURLNotation( _rUrlOrPath );
106cdf0e10cSrcweir 				break;
107cdf0e10cSrcweir 
108cdf0e10cSrcweir 			case INET_PROT_NOT_VALID:
109cdf0e10cSrcweir 				// assume system notation
110cdf0e10cSrcweir                 bSuccess = implInitWithSystemNotation( _rUrlOrPath );
111cdf0e10cSrcweir 				break;
112cdf0e10cSrcweir 
113cdf0e10cSrcweir 			default:
114*7950f2afSmseidel 				// it's a known scheme, but no file-URL -> assume that both the URL representation and the
115cdf0e10cSrcweir 				// system representation are the URL itself
116cdf0e10cSrcweir 				m_sSystem = m_sFileURL = _rUrlOrPath;
117cdf0e10cSrcweir 				bSuccess = true;
118cdf0e10cSrcweir 				break;
119cdf0e10cSrcweir 		}
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 		OSL_ENSURE( bSuccess, "OFileNotation::OFileNotation: could not detect the format!" );
122cdf0e10cSrcweir 	}
123cdf0e10cSrcweir 
124cdf0e10cSrcweir 	//---------------------------------------------------------------------
get(NOTATION _eOutputNotation)125cdf0e10cSrcweir 	::rtl::OUString OFileNotation::get(NOTATION _eOutputNotation)
126cdf0e10cSrcweir 	{
127cdf0e10cSrcweir 		switch (_eOutputNotation)
128cdf0e10cSrcweir 		{
129cdf0e10cSrcweir 			case N_SYSTEM: return m_sSystem;
130cdf0e10cSrcweir 			case N_URL: return m_sFileURL;
131cdf0e10cSrcweir 		}
132cdf0e10cSrcweir 
133cdf0e10cSrcweir 		OSL_ENSURE(sal_False, "OFileNotation::get: inavlid enum value!");
134cdf0e10cSrcweir 		return ::rtl::OUString();
135cdf0e10cSrcweir 	}
136cdf0e10cSrcweir 
137cdf0e10cSrcweir //.........................................................................
138cdf0e10cSrcweir }	// namespace svt
139cdf0e10cSrcweir //.........................................................................
140cdf0e10cSrcweir 
141