Salome HOME
FileService
[modules/gde.git] / projects / GDE_API_CPP / api / src / FileService.cpp
1 #include "FileService.hpp"
2 #include "HttpConnection.hpp"
3 #include "CommandTO.hpp"
4 #include "CommandResultTO.hpp"
5 #include "JsonFormatter.hpp"
6 #include "Credentials.hpp"
7
8 #include <Poco/DateTimeFormatter.h>
9 #include <Poco/Timestamp.h>
10 #include <Poco/DateTimeFormat.h>
11
12 /*
13  * WARNING: keep enum values synchronized to WEB API (FileService)
14  */
15 enum {
16   CREATE_FILE = 1,
17   DELETE_FILE,
18   UPDATE_FILE,
19   READ_FILE,
20   FIND_BY_NAME
21 };
22
23 std::string gde::FileService::_servletName = "FileService";
24
25 const gde::File
26 gde::FileService::createFile(const std::string& name)
27 {
28   // build JSON string for CommandTO data
29   Poco::JSON::Object obj;
30   obj.set("name", Poco::Dynamic::Var(name));
31   std::string creationDate = Poco::DateTimeFormatter::format(Poco::Timestamp(), Poco::DateTimeFormat::SORTABLE_FORMAT);
32   obj.set("creationDate", Poco::Dynamic::Var(creationDate));
33   std::string data = JsonFormatter::stringify(obj);
34
35   CommandTO cto(CREATE_FILE, data);
36   const Credentials& credentials = _session.getCredentials();
37   std::string uri = _session.getServiceURI(_servletName);
38   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
39
40   // build File object from CommandResultTO data (json format)
41   {
42     Poco::JSON::Object::Ptr object = JsonFormatter::parse(crto.getData());
43     int id = JsonFormatter::extract<int>(object, "id");
44     std::string name = JsonFormatter::extract<std::string>(object, "name");
45     int length = JsonFormatter::extract<int>(object, "length");
46     std::string checksum = JsonFormatter::extract<std::string>(object, "checksum");
47     Poco::Timestamp creationDate = JsonFormatter::extract(object, "creationDate");
48     Poco::Timestamp updateDate = JsonFormatter::extract(object, "updateDate");
49     bool valid = JsonFormatter::extract<bool>(object, "valid");
50     bool deleted = JsonFormatter::extract<bool>(object, "deleted");
51     Poco::Timestamp deletionDate = JsonFormatter::extract(object, "deletionDate");
52     int attributeGroupId = JsonFormatter::extract<int>(object, "attributeGroupId");
53     std::string data = JsonFormatter::extract<std::string>(object, "data");
54     int dataProfileId = JsonFormatter::extract<int>(object, "dataProfileId");
55
56     return gde::File(id, name, length, checksum, creationDate, updateDate, valid, deleted, deletionDate, attributeGroupId, data, dataProfileId);
57   }
58 }
59
60 bool
61 gde::FileService::deleteFile(const File& file)
62 {
63   CommandTO cto(DELETE_FILE);
64   cto.setParameter("fileId", file.getId());
65
66   const Credentials& credentials = _session.getCredentials();
67   std::string uri = _session.getServiceURI(_servletName);
68   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
69   return crto.getCode() == CommandResultTO::OK;
70 }
71
72 const gde::File
73 gde::FileService::updateFile(const File& file)
74 {
75   // build JSON string for CommandTO data
76   Poco::JSON::Object obj;
77   obj.set("id", Poco::Dynamic::Var(file.getId()));
78   obj.set("name", Poco::Dynamic::Var(file.getName()));
79   obj.set("length", Poco::Dynamic::Var(file.getLength()));
80   obj.set("checksum", Poco::Dynamic::Var(file.getChecksum()));
81   obj.set("creationDate", Poco::Dynamic::Var(file.getCreationDate()));
82   obj.set("valid", Poco::Dynamic::Var(file.getValid()));
83   obj.set("deleted", Poco::Dynamic::Var(file.getDeleted()));
84   obj.set("deletionDate", Poco::Dynamic::Var(file.getDeletionDate()));
85   obj.set("attributeGroupId", Poco::Dynamic::Var(file.getAttributeGroupId()));
86   obj.set("data", Poco::Dynamic::Var(file.getData()));
87   obj.set("dataProfileId", Poco::Dynamic::Var(file.getDataProfileId()));
88   std::string updateDate = Poco::DateTimeFormatter::format(Poco::Timestamp(), Poco::DateTimeFormat::SORTABLE_FORMAT);
89   obj.set("updateDate", Poco::Dynamic::Var(updateDate));
90   std::string data = JsonFormatter::stringify(obj);
91
92   CommandTO cto(UPDATE_FILE, data);
93   const Credentials& credentials = _session.getCredentials();
94   std::string uri = _session.getServiceURI(_servletName);
95   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
96
97   // build File object from CommandResultTO data (json format)
98   {
99     Poco::JSON::Object::Ptr object = JsonFormatter::parse(crto.getData());
100     int id = JsonFormatter::extract<int>(object, "id");
101     std::string name = JsonFormatter::extract<std::string>(object, "name");
102     int length = JsonFormatter::extract<int>(object, "length");
103     std::string checksum = JsonFormatter::extract<std::string>(object, "checksum");
104     Poco::Timestamp creationDate = JsonFormatter::extract(object, "creationDate");
105     Poco::Timestamp updateDate = JsonFormatter::extract(object, "updateDate");
106     bool valid = JsonFormatter::extract<bool>(object, "valid");
107     bool deleted = JsonFormatter::extract<bool>(object, "deleted");
108     Poco::Timestamp deletionDate = JsonFormatter::extract(object, "deletionDate");
109     int attributeGroupId = JsonFormatter::extract<int>(object, "attributeGroupId");
110     std::string data = JsonFormatter::extract<std::string>(object, "data");
111     int dataProfileId = JsonFormatter::extract<int>(object, "dataProfileId");
112
113     return gde::File(id, name, length, checksum, creationDate, updateDate, valid, deleted, deletionDate, attributeGroupId, data, dataProfileId);
114   }
115 }
116
117 const gde::File
118 gde::FileService::readFile(int fileId)
119 {
120   CommandTO cto(READ_FILE);
121   cto.setParameter("fileId", fileId);
122
123   const Credentials& credentials = _session.getCredentials();
124   std::string uri = _session.getServiceURI(_servletName);
125   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
126
127   // build File object from CommandResultTO data (json format)
128   {
129     Poco::JSON::Object::Ptr object = JsonFormatter::parse(crto.getData());
130     int id = JsonFormatter::extract<int>(object, "id");
131     std::string name = JsonFormatter::extract<std::string>(object, "name");
132     int length = JsonFormatter::extract<int>(object, "length");
133     std::string checksum = JsonFormatter::extract<std::string>(object, "checksum");
134     Poco::Timestamp creationDate = JsonFormatter::extract(object, "creationDate");
135     Poco::Timestamp updateDate = JsonFormatter::extract(object, "updateDate");
136     bool valid = JsonFormatter::extract<bool>(object, "valid");
137     bool deleted = JsonFormatter::extract<bool>(object, "deleted");
138     Poco::Timestamp deletionDate = JsonFormatter::extract(object, "deletionDate");
139     int attributeGroupId = JsonFormatter::extract<int>(object, "attributeGroupId");
140     std::string data = JsonFormatter::extract<std::string>(object, "data");
141     int dataProfileId = JsonFormatter::extract<int>(object, "dataProfileId");
142
143     return gde::File(id, name, length, checksum, creationDate, updateDate, valid, deleted, deletionDate, attributeGroupId, data, dataProfileId);
144   }
145 }
146
147 const gde::File
148 gde::FileService::findByName(const std::string& name)
149 {
150   CommandTO cto(FIND_BY_NAME);
151   cto.setParameter("fileName", name);
152
153   const Credentials& credentials = _session.getCredentials();
154   std::string uri = _session.getServiceURI(_servletName);
155   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
156
157   // build File object from CommandResultTO data (json format)
158   {
159     Poco::JSON::Object::Ptr object = JsonFormatter::parse(crto.getData());
160     int id = JsonFormatter::extract<int>(object, "id");
161     std::string name = JsonFormatter::extract<std::string>(object, "name");
162     int length = JsonFormatter::extract<int>(object, "length");
163     std::string checksum = JsonFormatter::extract<std::string>(object, "checksum");
164     Poco::Timestamp creationDate = JsonFormatter::extract(object, "creationDate");
165     Poco::Timestamp updateDate = JsonFormatter::extract(object, "updateDate");
166     bool valid = JsonFormatter::extract<bool>(object, "valid");
167     bool deleted = JsonFormatter::extract<bool>(object, "deleted");
168     Poco::Timestamp deletionDate = JsonFormatter::extract(object, "deletionDate");
169     int attributeGroupId = JsonFormatter::extract<int>(object, "attributeGroupId");
170     std::string data = JsonFormatter::extract<std::string>(object, "data");
171     int dataProfileId = JsonFormatter::extract<int>(object, "dataProfileId");
172
173     return gde::File(id, name, length, checksum, creationDate, updateDate, valid, deleted, deletionDate, attributeGroupId, data, dataProfileId);
174   }
175 }