initial code repo
[stor4nfv.git] / src / ceph / src / rgw / rgw_lc_s3.h
diff --git a/src/ceph/src/rgw/rgw_lc_s3.h b/src/ceph/src/rgw/rgw_lc_s3.h
new file mode 100644 (file)
index 0000000..7ff1bf7
--- /dev/null
@@ -0,0 +1,229 @@
+#ifndef CEPH_RGW_LC_S3_H
+#define CEPH_RGW_LC_S3_H
+
+#include <map>
+#include <string>
+#include <iostream>
+#include <include/types.h>
+
+#include "include/str_list.h"
+#include "rgw_lc.h"
+#include "rgw_xml.h"
+
+class LCID_S3 : public XMLObj
+{
+public:
+  LCID_S3() {}
+  ~LCID_S3() override {}
+  string& to_str() { return data; }
+};
+
+class LCPrefix_S3 : public XMLObj
+{
+public:
+  LCPrefix_S3() {}
+  ~LCPrefix_S3() override {}
+  string& to_str() { return data; }
+};
+
+class LCFilter_S3 : public LCFilter, public XMLObj
+{
+ public:
+  ~LCFilter_S3() override {}
+  string& to_str() { return data; }
+  void to_xml(ostream& out){
+    out << "<Filter>";
+      if (!prefix.empty())
+        out << "<Prefix>" << prefix << "</Prefix>";
+    out << "</Filter>";
+  }
+  void dump_xml(Formatter *f) const {
+    f->open_object_section("Filter");
+    if (!prefix.empty())
+      encode_xml("Prefix", prefix, f);
+    f->close_section(); // Filter
+  }
+};
+
+class LCStatus_S3 : public XMLObj
+{
+public:
+  LCStatus_S3() {}
+  ~LCStatus_S3() override {}
+  string& to_str() { return data; }
+};
+
+class LCDays_S3 : public XMLObj
+{
+public:
+  LCDays_S3() {}
+  ~LCDays_S3() override {}
+  string& to_str() { return data; }
+};
+
+class LCDate_S3 : public XMLObj
+{
+public:
+  LCDate_S3() {}
+  ~LCDate_S3() override {}
+  string& to_str() { return data; }
+};
+
+class LCDeleteMarker_S3 : public XMLObj
+{
+public:
+  LCDeleteMarker_S3() {}
+  ~LCDeleteMarker_S3() override {}
+  string& to_str() { return data; }
+};
+
+class LCExpiration_S3 : public LCExpiration, public XMLObj
+{
+private:
+  bool dm_expiration;
+public:
+  LCExpiration_S3(): dm_expiration(false) {}
+  LCExpiration_S3(string _days, string _date, bool _dm_expiration) {
+    days = _days;
+    date = _date;
+    dm_expiration = _dm_expiration;
+  }
+  ~LCExpiration_S3() override {}
+
+  bool xml_end(const char *el) override;
+  void to_xml(ostream& out) {
+    out << "<Expiration>";
+    if (dm_expiration) {
+      out << "<ExpiredObjectDeleteMarker>" << "true" << "</ExpiredObjectDeleteMarker>";
+    } else if (!days.empty()){
+      out << "<Days>" << days << "</Days>";
+    } else {
+      out << "<Date>" << date << "</Date>";
+    }
+    out << "</Expiration>";
+  }
+  void dump_xml(Formatter *f) const {
+    f->open_object_section("Expiration");
+    if (dm_expiration) {
+      encode_xml("ExpiredObjectDeleteMarker", "true", f);
+    } else if (!days.empty()) {
+      encode_xml("Days", days, f);
+    } else {
+      encode_xml("Date", date, f);
+    }
+    f->close_section(); // Expiration
+  }
+
+  void set_dm_expiration(bool _dm_expiration) {
+    dm_expiration = _dm_expiration;
+  }
+
+  bool get_dm_expiration() {
+    return dm_expiration;
+  }
+};
+
+class LCNoncurExpiration_S3 : public LCExpiration, public XMLObj
+{
+public:
+  LCNoncurExpiration_S3() {}
+  ~LCNoncurExpiration_S3() override {}
+  
+  bool xml_end(const char *el) override;
+  void to_xml(ostream& out) {
+    out << "<NoncurrentVersionExpiration>" << "<NoncurrentDays>" << days << "</NoncurrentDays>"<< "</NoncurrentVersionExpiration>";
+  }
+  void dump_xml(Formatter *f) const {
+    f->open_object_section("NoncurrentVersionExpiration");
+    encode_xml("NoncurrentDays", days, f);
+    f->close_section(); 
+  }
+};
+
+class LCMPExpiration_S3 : public LCExpiration, public XMLObj
+{
+public:
+  LCMPExpiration_S3() {}
+  ~LCMPExpiration_S3() {}
+
+  bool xml_end(const char *el);
+  void to_xml(ostream& out) {
+    out << "<AbortIncompleteMultipartUpload>" << "<DaysAfterInitiation>" << days << "</DaysAfterInitiation>" << "</AbortIncompleteMultipartUpload>";
+  }
+  void dump_xml(Formatter *f) const {
+    f->open_object_section("AbortIncompleteMultipartUpload");
+    encode_xml("DaysAfterInitiation", days, f);
+    f->close_section();
+  }
+};
+
+class LCRule_S3 : public LCRule, public XMLObj
+{
+public:
+  LCRule_S3() {}
+  ~LCRule_S3() override {}
+
+  void to_xml(CephContext *cct, ostream& out);
+  bool xml_end(const char *el) override;
+  bool xml_start(const char *el, const char **attr);
+  void dump_xml(Formatter *f) const {
+    f->open_object_section("Rule");
+    encode_xml("ID", id, f);
+    // In case of an empty filter and an empty Prefix, we defer to Prefix.
+    if (!filter.empty()) {
+      const LCFilter_S3& lc_filter = static_cast<const LCFilter_S3&>(filter);
+      lc_filter.dump_xml(f);
+    } else {
+      encode_xml("Prefix", prefix, f);
+    }
+    encode_xml("Status", status, f);
+    if (!expiration.empty() || dm_expiration) {
+      LCExpiration_S3 expir(expiration.get_days_str(), expiration.get_date(), dm_expiration);
+      expir.dump_xml(f);
+    }
+    if (!noncur_expiration.empty()) {
+      const LCNoncurExpiration_S3& noncur_expir = static_cast<const LCNoncurExpiration_S3&>(noncur_expiration);
+      noncur_expir.dump_xml(f);
+    }
+    if (!mp_expiration.empty()) {
+      const LCMPExpiration_S3& mp_expir = static_cast<const LCMPExpiration_S3&>(mp_expiration);
+      mp_expir.dump_xml(f);
+    }
+
+    f->close_section(); // Rule
+  }
+};
+
+class RGWLCXMLParser_S3 : public RGWXMLParser
+{
+  CephContext *cct;
+
+  XMLObj *alloc_obj(const char *el) override;
+public:
+  RGWLCXMLParser_S3(CephContext *_cct) : cct(_cct) {}
+};
+
+class RGWLifecycleConfiguration_S3 : public RGWLifecycleConfiguration, public XMLObj
+{
+public:
+  RGWLifecycleConfiguration_S3(CephContext *_cct) : RGWLifecycleConfiguration(_cct) {}
+  RGWLifecycleConfiguration_S3() : RGWLifecycleConfiguration(NULL) {}
+  ~RGWLifecycleConfiguration_S3() override {}
+
+  bool xml_end(const char *el) override;
+
+  void to_xml(ostream& out) {
+    out << "<LifecycleConfiguration xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">";
+    multimap<string, LCRule>::iterator iter;
+    for (iter = rule_map.begin(); iter != rule_map.end(); ++iter) {
+      LCRule_S3& rule = static_cast<LCRule_S3&>(iter->second);
+      rule.to_xml(cct, out);
+    }
+    out << "</LifecycleConfiguration>";
+  }
+  int rebuild(RGWRados *store, RGWLifecycleConfiguration& dest);
+  void dump_xml(Formatter *f) const;
+};
+
+
+#endif