Fix the boiler plate codes
[platform/framework/native/appfw.git] / src / io / inc / FIo_FileImpl.h
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 /**
18  * @file        FIo_FileImpl.h
19  * @brief       This is the header file for the %_FileImpl class.
20  *
21  * This header file contains the declarations of the %_FileImpl class.
22  */
23
24 #ifndef _FIO_INTERNAL_FILE_IMPL_H_
25 #define _FIO_INTERNAL_FILE_IMPL_H_
26
27 #include <FBaseObject.h>
28 #include <FBaseInternalTypes.h>
29 #include <FOspConfig.h>
30 #include <FIoFile.h>
31
32 namespace Tizen {namespace Base
33 {
34 class String;
35 class ByteBuffer;
36 }}
37
38 namespace Tizen { namespace Io
39 {
40
41 class File;
42 class FileAttributes;
43 class _NormalFile;
44 class _SecureFile;
45 class _IFileCore;
46 class _FileLockImpl;
47
48 #define MAX_FILEPATH_APP    18
49 #define MAX_FILEPATH_MEDIA  2
50 #define MAX_FILEPATH_SYSTEM 2
51
52 /**
53  * @enum        _FilePathType
54  * Defines various file path types supported.
55  *
56  * @since 2.1
57  */
58 enum _FilePathType
59 {
60         FILEPATH_TYPE_INVALID, // invalid case
61         FILEPATH_TYPE_APP, // for paths like /home, /Res, /Share etc.
62         FILEPATH_TYPE_MEDIA, // for paths like /Media,/Storagecard/Media, /Media/Images, /Media/xxx etc.
63         FILEPATH_TYPE_SYSTEM // for paths like /SystemRw, /Tmp etc.
64 };
65
66 /**
67  * @enum        _FileLockMode
68  * Defines various file lock modes supported.
69  *
70  * @since 2.1
71  */
72 enum _FileLockMode
73 {
74         FILE_LOCK_MODE_INVALID, // invalid case
75         FILE_LOCK_MODE_BLOCKING, // blocking mode
76         FILE_LOCK_MODE_NON_BLOCKING // non blocking mode
77 };
78
79 class _OSP_EXPORT_ _FileImpl
80         : public Tizen::Base::Object
81 {
82
83 public:
84         _FileImpl(void);
85
86         result Construct(const Tizen::Base::String& filePath, const Tizen::Base::String& openMode, bool createParentDirectories, const Tizen::Base::ByteBuffer* pSecretKey);
87
88         result Construct(const Tizen::Base::String& filePath, const char* pOpenMode, const Tizen::Base::ByteBuffer* pSecretKey);
89
90         virtual ~_FileImpl(void);
91
92         result Read(Tizen::Base::ByteBuffer& buffer);
93
94         int Read(void* buffer, int length);
95
96         result ReadN(char** buffer, int& length);
97
98         result Read(Tizen::Base::String& buffer);
99
100         result Write(const Tizen::Base::ByteBuffer& buffer);
101
102         result Write(const void* buffer, int length);
103
104         result Write(const Tizen::Base::String& buffer);
105
106         result Flush(void);
107
108         int Tell(void) const;
109
110         result Seek(FileSeekPosition position, long offset);
111
112         result Truncate(int length);
113
114         Tizen::Base::String GetName(void) const;
115
116         FILE* GetFilePointer(void) const;
117
118         FileLock* LockN(FileLockType lockType);
119
120         FileLock* LockN(FileLockType lockType, int offset, int length);
121
122         FileLock* TryToLockN(FileLockType lockType);
123
124         FileLock* TryToLockN(FileLockType lockType, int offset, int length);
125
126         static result Remove(const Tizen::Base::String& filePath);
127
128         static result Move(const Tizen::Base::String& oldFilePath, const Tizen::Base::String& newFilePath);
129
130         static result Copy(const Tizen::Base::String& srcFilePath, const Tizen::Base::String& destFilePath, bool failIfExist);
131
132         static result GetAttributes(const Tizen::Base::String& filePath, FileAttributes& attribute);
133
134         static Tizen::Base::String GetFileName(const Tizen::Base::String& filePath);
135
136         static Tizen::Base::String GetFileExtension(const Tizen::Base::String& filePath);
137
138         static bool IsFileExist(const Tizen::Base::String& filePath);
139
140         static result ConvertToSecureFile(const Tizen::Base::String& plainFilePath, const Tizen::Base::String& secureFilePath, const Tizen::Base::ByteBuffer& key);
141
142         static bool IsAppPath(const Tizen::Base::String& filePath);
143
144         static bool IsMediaPath(const Tizen::Base::String& filePath);
145
146         static bool IsSystemPath(const Tizen::Base::String& filePath);
147
148         static bool PrepareDataCaging(const Tizen::Base::String& appRootPath, const Tizen::Base::String& pkgId); // for OSP compatible app
149
150         static bool FinalizeDataCaging(const Tizen::Base::String& appRootPath); // for OSP compatible app
151
152         static bool CreateOspApplicationDirectories(const Tizen::Base::String& appRootpath, const Tizen::Base::String& pkgId); // for Tizen 2.0 app
153
154         static int GetAvailableUid(void);
155
156         static bool VerifyFilePathCompatibility(const Tizen::Base::String& filePath, bool ospCompat);
157
158         static _FileImpl* GetInstance(File& file);
159
160         static const _FileImpl* GetInstance(const File& file);
161
162         /**
163         * Converts the virtual path to the physical path.
164         *
165         * @since 2.1
166         * @return               An error code
167         * @param[in]    virtualPath             The path used by applications with API version 2.0
168         * @param[out]   physicalPath    The physical absolute path
169         * @exception    E_SUCCESS               The method is successful.
170         * @exception    E_INVALID_ARG   The specified @c virtualPath is not valid.
171         */
172         static result ConvertVirtualToPhysicalPath(const Tizen::Base::String& virtualPath, Tizen::Base::String& physicalPath);
173
174         /**
175         * Converts the physical path to the virtual path.
176         *
177         * @since 2.1
178         * @return               An error code
179         * @param[in]    physicalPath    The physical absolute path
180         * @param[out]   virtualPath             The path used by applications with API version 2.0
181         * @exception    E_SUCCESS               The method is successful.
182         * @exception    E_INVALID_ARG   The specified @c physicalPath is not valid.
183         */
184         static result ConvertPhysicalToVirtualPath(const Tizen::Base::String& physicalPath, Tizen::Base::String& virtualPath);
185
186         bool IsReadable(void) const
187         {
188         return __read;
189         }
190
191         bool IsWritable(void) const
192         {
193         return __write;
194         }
195
196 private:
197         _FileImpl& operator =(const _FileImpl& source);
198
199         _FileImpl(const _FileImpl& source);
200
201         bool VerifyFileOpenMode(const char* pOpenMode);
202
203         FileLock* LockN(FileLockType lockType, _FileLockMode lockMode, int offset, int length);
204
205         static bool VerifyFilePath(const Tizen::Base::String& filePath, _FilePathType pathType);
206
207         static bool CreateOspInternalDirectories(const Tizen::Base::String& appRootPath, const Tizen::Base::String& pkgId);
208
209         static bool CreateOspExternalDirectories(const Tizen::Base::String& pkgId);
210
211         static bool CreateSlpDirectories(void);
212
213     static bool CreateSymbolicLink(void);
214
215         static bool CleanDirectories(const Tizen::Base::String& appRootPath, const Tizen::Base::String& pkgId);
216
217         _IFileCore* __pCore;
218         bool __read;
219         bool __write;
220         bool __truncate;
221         bool __append;
222         _FileLockImpl* __pFileLockImpl;
223
224         friend class File;
225         friend class _FileLockImpl;
226
227 }; // _FileImpl
228
229 }} // Tizen::Io
230
231 #endif // _FIO_INTERNAL_FILE_IMPL_H_
232