My Project
Package.h
1 /*-----------------------------------------------------------------------
2 Copyright F2I-CONSULTING, (2014-2017)
3 
4 philippe.verney@f2i-consulting.com
5 
6 This software is a computer program whose purpose is to access to data formatted using Energistics standards.
7 
8 This software is governed by the CeCILL-B license under French law and
9 abiding by the rules of distribution of free software. You can use,
10 modify and/ or redistribute the software under the terms of the CeCILL-B
11 license as circulated by CEA, CNRS and INRIA at the following URL
12 "http://www.cecill.info".
13 
14 As a counterpart to the access to the source code and rights to copy,
15 modify and redistribute granted by the license, users are provided only
16 with a limited warranty and the software's author, the holder of the
17 economic rights, and the successive licensors have only limited
18 liability.
19 
20 In this respect, the user's attention is drawn to the risks associated
21 with loading, using, modifying and/or developing or reproducing the
22 software by the user in light of its specific status of free software,
23 that may mean that it is complicated to manipulate, and that also
24 therefore means that it is reserved for developers and experienced
25 professionals having in-depth computer knowledge. Users are therefore
26 encouraged to load and test the software's suitability as regards their
27 requirements in conditions enabling the security of their systems and/or
28 data to be ensured and, more generally, to use and operate it in the
29 same conditions as regards security.
30 
31 The fact that you are presently reading this means that you have had
32 knowledge of the CeCILL-B license and that you accept its terms.
33 -----------------------------------------------------------------------*/
34 #ifndef PACKAGE_H
35 #define PACKAGE_H
36 
37 #include <vector>
38 #include <string>
39 
40 #if (defined(_WIN32) && _MSC_VER >= 1600) || defined(__APPLE__)
41 #include <unordered_map>
42 #else
43 #include <tr1/unordered_map>
44 #endif
45 
46 #include "FileCoreProperties.h"
47 #include "FileContentType.h"
48 #include "FileRelationship.h"
49 #include "FilePart.h"
50 
51 namespace epc
52 {
53  class Package
54  {
55 
56  private :
57  class CheshireCat; // Not defined here but in the cpp
58  CheshireCat * d_ptr; // opaque pointer
59 
60 #if (defined(_WIN32) && _MSC_VER >= 1600) || defined(__APPLE__)
61  typedef std::unordered_map<std::string, FilePart> PartMap;
62 #else
63  typedef std::tr1::unordered_map<std::string, FilePart> PartMap;
64 #endif
65 
70  void writeStringIntoNewPart(const std::string &input, const std::string & partPath);
71 
72  static const char* CORE_PROP_REL_TYPE;
73  static const char* EXTENDED_CORE_PROP_REL_TYPE;
74 
75  public:
79  Package();
80 
84  Package(const FileCoreProperties & pkgFileCP, const FileContentType & pkgFileCT, const FileRelationship & pkgFileRS, const PartMap & pkgFileP, const std::string & pkgPathName);
85 
89  ~Package();
90 
94  void openForWriting(const std::string & pkgPathName, bool useZip64 = false);
95 
100  std::vector<std::string> openForReading(const std::string & pkgPathName);
101 
105  void close();
106 
111 
115  const FileContentType& getFileContentType() const;
116 
121 
125  const PartMap & getAllFilePart() const;
126 
130  const std::string & getPathname() const;
131 
136  void setFileFileCoreProperties(const FileCoreProperties & pkgFileCP);
137 
142 #if (defined(_WIN32) && _MSC_VER >= 1600) || defined(__APPLE__)
143  std::unordered_map< std::string, std::string > & getExtendedCoreProperty();
144 #else
145  std::tr1::unordered_map< std::string, std::string > & getExtendedCoreProperty();
146 #endif
147 
153  void addProperty(const CoreProperty::TypeProperty & pkgTypeProperty, const std::string & pkgPropertyValue);
154 
159  void setFileContentType(const FileContentType & pkgFileCT);
160 
165  void addContentType(const ContentType & contentType);
166 
171  void setPrincipalRelationship(const FileRelationship & pkgFileRS);
172 
177  void addRelationship(const Relationship & relationship);
178 
183  FilePart* createPart(const std::string & inputContent, const std::string & outputPartPath);
184 
188  const FilePart* findPart(const std::string & outputPartPath) const;
189 
193  bool fileExists(const std::string & filename) const;
194 
198  std::string extractFile(const std::string & filename, const std::string & password = "");
199 
200  void writePackage();
201  };
202 }
203 
204 #endif
void setPrincipalRelationship(const FileRelationship &pkgFileRS)
set the Relationships file.
Definition: Package.cpp:454
const FilePart * findPart(const std::string &outputPartPath) const
Find a part corresponding to the given path.
Definition: Package.cpp:472
const FileCoreProperties & getFileCoreProperties() const
Definition: Package.cpp:351
void openForWriting(const std::string &pkgPathName, bool useZip64=false)
Definition: Package.cpp:227
bool fileExists(const std::string &filename) const
Definition: Package.cpp:672
~Package()
Definition: Package.cpp:222
void close()
Definition: Package.cpp:346
Definition: ContentType.h:41
Package()
Definition: Package.cpp:212
Definition: FileRelationship.h:47
Definition: FileCoreProperties.h:41
void addProperty(const CoreProperty::TypeProperty &pkgTypeProperty, const std::string &pkgPropertyValue)
add a Property in the CoreProperties file of package.
Definition: Package.cpp:390
Definition: FilePart.h:42
const std::string & getPathname() const
Definition: Package.cpp:371
const FileContentType & getFileContentType() const
Definition: Package.cpp:356
std::vector< std::string > openForReading(const std::string &pkgPathName)
Definition: Package.cpp:253
FilePart * createPart(const std::string &inputContent, const std::string &outputPartPath)
Creates a part in the package and returns it. This part will be automatically destroy with the packag...
Definition: Package.cpp:464
std::string extractFile(const std::string &filename, const std::string &password="")
Definition: Package.cpp:680
TypeProperty
Definition: CoreProperty.h:49
Definition: ContentType.h:39
Definition: Package.h:53
Definition: FileContentType.h:48
const FileRelationship & getPrincipalRelationship() const
Definition: Package.cpp:361
void setFileContentType(const FileContentType &pkgFileCT)
set the ContentTypes file.
Definition: Package.cpp:444
void addContentType(const ContentType &contentType)
add a ContentType in the ContentTypes file of package.
Definition: Package.cpp:449
Definition: Relationship.h:44
const PartMap & getAllFilePart() const
Definition: Package.cpp:366
void addRelationship(const Relationship &relationship)
add a Relationship in the Relationships file of package.
Definition: Package.cpp:459
std::tr1::unordered_map< std::string, std::string > & getExtendedCoreProperty()
Definition: Package.cpp:384
Definition: Package.cpp:149
void setFileFileCoreProperties(const FileCoreProperties &pkgFileCP)
set the CoreProperties file.
Definition: Package.cpp:376