ws_dfuService.hpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /*##############################################################################
  2. HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. ############################################################################## */
  13. #ifndef _ESPWIZ_WsDfu_HPP__
  14. #define _ESPWIZ_WsDfu_HPP__
  15. #ifdef _WIN32
  16. #define FILEVIEW_API __declspec(dllimport)
  17. #else
  18. #define FILEVIEW_API
  19. #endif
  20. #include "ws_dfu_esp.ipp"
  21. #include "fileview.hpp"
  22. #include "fvrelate.hpp"
  23. #include "dadfs.hpp"
  24. class CWsDfuSoapBindingEx : public CWsDfuSoapBinding
  25. {
  26. public:
  27. CWsDfuSoapBindingEx(IPropertyTree *cfg, const char *name, const char *process, http_soap_log_level llevel=hsl_none) : CWsDfuSoapBinding(cfg, name, process, llevel){}
  28. virtual void getNavigationData(IEspContext &context, IPropertyTree & data)
  29. {
  30. }
  31. };
  32. class CWsDfuEx : public CWsDfu
  33. {
  34. private:
  35. Owned<IXslProcessor> m_xsl;
  36. Mutex m_superfilemutex;
  37. public:
  38. IMPLEMENT_IINTERFACE;
  39. virtual ~CWsDfuEx(){};
  40. virtual void init(IPropertyTree *cfg, const char *process, const char *service);
  41. bool onDFUOpenFile(IEspContext &context, IEspDFUSearchRequest &req, IEspDFUSearchResponse &resp);
  42. bool onDFUSearchNonSubFiles(IEspContext &context, IEspDFUSearchRequest &req, IEspDFUSearchResponse &resp);
  43. bool onDFUSearch(IEspContext &context, IEspDFUSearchRequest &req, IEspDFUSearchResponse &resp);
  44. bool onDFUQuery(IEspContext &context, IEspDFUQueryRequest &req, IEspDFUQueryResponse &resp);
  45. bool onDFUInfo(IEspContext &context, IEspDFUInfoRequest &req, IEspDFUInfoResponse &resp);
  46. bool onDFUSpace(IEspContext &context, IEspDFUSpaceRequest &req, IEspDFUSpaceResponse &resp);
  47. bool onDFUDefFile(IEspContext &context,IEspDFUDefFileRequest &req, IEspDFUDefFileResponse &resp);
  48. bool onDFUArrayAction(IEspContext &context, IEspDFUArrayActionRequest &req, IEspDFUArrayActionResponse &resp);
  49. bool onAddtoSuperfile(IEspContext &context, IEspAddtoSuperfileRequest &req, IEspAddtoSuperfileResponse &resp);
  50. bool onDFUFileView(IEspContext &context, IEspDFUFileViewRequest &req, IEspDFUFileViewResponse &resp);
  51. bool onDFUGetDataColumns(IEspContext &context, IEspDFUGetDataColumnsRequest &req, IEspDFUGetDataColumnsResponse &resp);
  52. bool onDFUBrowseData(IEspContext &context, IEspDFUBrowseDataRequest &req, IEspDFUBrowseDataResponse &resp);
  53. bool onDFUSearchData(IEspContext &context, IEspDFUSearchDataRequest &req, IEspDFUSearchDataResponse &resp);
  54. virtual bool onSavexml(IEspContext &context, IEspSavexmlRequest &req, IEspSavexmlResponse &resp);
  55. virtual bool onAdd(IEspContext &context, IEspAddRequest &req, IEspAddResponse &resp);
  56. virtual bool onAddRemote(IEspContext &context, IEspAddRemoteRequest &req, IEspAddRemoteResponse &resp);
  57. virtual bool onSuperfileList(IEspContext &context, IEspSuperfileListRequest &req, IEspSuperfileListResponse &resp);
  58. virtual bool onSuperfileAction(IEspContext &context, IEspSuperfileActionRequest &req, IEspSuperfileActionResponse &resp);
  59. private:
  60. const char* getPrefixFromLogicalName(const char* logicalName, StringBuffer& prefix);
  61. const char* getShortDescription(const char* description, StringBuffer& shortDesc);
  62. bool addDFUQueryFilter(DFUQResultField *filters, unsigned short &count, MemoryBuffer &buff, const char* value, DFUQResultField name);
  63. void appendDFUQueryFilter(const char *name, DFUQFilterType type, const char *value, StringBuffer& filterBuf);
  64. void appendDFUQueryFilter(const char *name, DFUQFilterType type, const char *value, const char *valueHigh, StringBuffer& filterBuf);
  65. void setFileTypeFilter(const char* fileType, StringBuffer& filterBuf);
  66. void setFileNameFilter(const char* fname, const char* prefix, StringBuffer &buff);
  67. void setDFUQueryFilters(IEspDFUQueryRequest& req, StringBuffer& filterBuf);
  68. void setDFUQuerySortOrder(IEspDFUQueryRequest& req, StringBuffer& sortBy, bool& descending, DFUQResultField* sortOrder);
  69. bool addToLogicalFileList(IPropertyTree& file, double version, IArrayOf<IEspDFULogicalFile>& logicalFiles);
  70. void setDFUQueryResponse(IEspContext &context, unsigned totalFiles, StringBuffer& sortBy, bool descending, unsigned pageStart,
  71. unsigned pageSize, IEspDFUQueryRequest & req, IEspDFUQueryResponse & resp);
  72. void getLogicalFileAndDirectory(IEspContext &context, IUserDescriptor* udesc, const char *dirname, IArrayOf<IEspDFULogicalFile>& LogicalFiles, int& numFiles, int& numDirs);
  73. bool doLogicalFileSearch(IEspContext &context, IUserDescriptor* udesc, IEspDFUQueryRequest & req, IEspDFUQueryResponse & resp);
  74. void doGetFileDetails(IEspContext &context, IUserDescriptor* udesc, const char *name,const char *cluster,
  75. const char *description,IEspDFUFileDetail& FileDetails);
  76. bool createSpaceItemsByDate(IArrayOf<IEspSpaceItem>& SpaceItems, StringBuffer interval, unsigned& yearFrom,
  77. unsigned& monthFrom, unsigned& dayFrom, unsigned& yearTo, unsigned& monthTo, unsigned& dayTo);
  78. bool setSpaceItemByScope(IArrayOf<IEspSpaceItem>& SpaceItems64, const char*scopeName, const char*logicalName, __int64 size);
  79. bool setSpaceItemByOwner(IArrayOf<IEspSpaceItem>& SpaceItems64, const char *owner, const char *logicalName, __int64 size);
  80. bool setSpaceItemByDate(IArrayOf<IEspSpaceItem>& SpaceItems, StringBuffer interval, StringBuffer mod, const char*logicalName, __int64 size);
  81. bool findPositionToAdd(const char *datetime, const __int64 size, const int numNeeded, const unsigned orderType,
  82. IArrayOf<IEspDFULogicalFile>& LogicalFiles, int& addToPos, bool& reachLimit);
  83. __int64 findPositionByParts(const __int64 parts, bool decsend, IArrayOf<IEspDFULogicalFile>& LogicalFiles);
  84. __int64 findPositionBySize(const __int64 size, bool decsend, IArrayOf<IEspDFULogicalFile>& LogicalFiles);
  85. __int64 findPositionByRecords(const __int64 records, bool decsend, IArrayOf<IEspDFULogicalFile>& LogicalFiles);
  86. __int64 findPositionByName(const char *name, bool descend, IArrayOf<IEspDFULogicalFile>& LogicalFiles);
  87. __int64 findPositionByOwner(const char *owner, bool descend, IArrayOf<IEspDFULogicalFile>& LogicalFiles);
  88. __int64 findPositionByCluster(const char *Cluster, bool descend, IArrayOf<IEspDFULogicalFile>& LogicalFiles);
  89. __int64 findPositionByDate(const char *datetime, bool descend, IArrayOf<IEspDFULogicalFile>& LogicalFiles);
  90. __int64 findPositionByDescription(const char *description, bool descend, IArrayOf<IEspDFULogicalFile>& LogicalFiles);
  91. bool checkDescription(const char *description, const char *descriptionFilter);
  92. void getAPageOfSortedLogicalFile(IEspContext &context, IUserDescriptor* udesc, IEspDFUQueryRequest & req, IEspDFUQueryResponse & resp);
  93. void getDefFile(IUserDescriptor* udesc, const char* FileName,StringBuffer& returnStr);
  94. void xsltTransformer(const char* xsltPath,StringBuffer& source,StringBuffer& returnStr);
  95. bool onDFUAction(IUserDescriptor* udesc, const char* LogicalFileName, const char* ClusterName, const char* ActionType, StringBuffer& returnStr);
  96. bool checkFileContent(IEspContext &context, IUserDescriptor* udesc, const char * logicalName, const char * cluster);
  97. void getRoxieClusterConfig(char const * clusterType, char const * clusterName, char const * processName, StringBuffer& netAddress, int& port);
  98. //bool getRoxieQueriesForFile(const char* logicalName, const char* cluster, StringArray& roxieQueries);
  99. bool checkRoxieQueryFilesOnDelete(IEspDFUArrayActionRequest &req, StringArray& roxieQueries);
  100. bool DFUDeleteFiles(IEspContext &context, IEspDFUArrayActionRequest &req, IEspDFUArrayActionResponse &resp);
  101. void setRootFilter(INewResultSet* result, const char* filterBy, IResultSetFilter* filter, bool disableUppercaseTranslation = true);
  102. void getMappingColumns(IRelatedBrowseFile * file, bool isPrimary, UnsignedArray& cols);
  103. void readColumnsForDisplay(StringBuffer& schemaText, StringArray& columnsDisplay, StringArray& columnsDisplayType);
  104. void mergeSchema(IRelatedBrowseFile * file, StringBuffer& schemaText, StringBuffer schemaText2,
  105. StringArray& columnsDisplay, StringArray& columnsDisplayType, StringArray& columnsHide);
  106. void mergeDataRow(StringBuffer& newRow, int depth, IPropertyTreeIterator* it, StringArray& columnsHide, StringArray& columnsUsed);
  107. void mergeDataRow(StringBuffer& newRow, StringBuffer dataRow1, StringBuffer dataRow2, StringArray& columnsHide);
  108. void browseRelatedFileSchema(IRelatedBrowseFile * file, const char* parentName, unsigned depth, StringBuffer& schemaText,
  109. StringArray& columnsDisplay, StringArray& columnsDisplayType, StringArray& columnsHide);
  110. int browseRelatedFileDataSet(double version, IRelatedBrowseFile * file, const char* parentName, unsigned depth, __int64 start, __int64& count, __int64& read,
  111. StringArray& columnsHide, StringArray& dataSetOutput);
  112. int GetIndexData(IEspContext &context, bool bSchemaOnly, const char* indexName, const char* parentName, const char* filterBy, __int64 start,
  113. __int64& count, __int64& read, __int64& total, StringBuffer& message, StringArray& columnLabels,
  114. StringArray& columnLabelsType, IArrayOf<IEspDFUData>& DataList, bool webDisableUppercaseTranslation);
  115. bool getUserFilePermission(IEspContext &context, IUserDescriptor* udesc, const char* logicalName, int& permission);
  116. void parseStringArray(const char *input, StringArray& strarray);
  117. int superfileAction(IEspContext &context, const char* action, const char* superfile, StringArray& subfiles,
  118. const char* beforeSubFile, bool existingSuperfile, bool autocreatesuper, bool deleteFile, bool removeSuperfile = true);
  119. private:
  120. bool m_disableUppercaseTranslation;
  121. StringBuffer m_clusterName;
  122. StringBuffer m_eclServer;
  123. StringBuffer daliServers_;
  124. StringBuffer defaultScope_;
  125. StringBuffer user_;
  126. StringBuffer password_;
  127. };
  128. //helper functions
  129. inline const char * splitName(const char * name)
  130. {
  131. int last = strlen(name)-1;
  132. for (char * finger=(char*)name+last; finger > name + 1 ; --finger)
  133. {
  134. if (*finger == ':' && *(finger-1) == ':')
  135. {
  136. assertex(finger<name+last);
  137. return finger+1;
  138. }
  139. }
  140. return name;
  141. }
  142. #endif //_ESPWIZ_WsDfu_HPP__