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