ARC SDK
DataPoint.h
1 // -*- indent-tabs-mode: nil -*-
2 
3 // Summary page for libarcdata doxygen module
4 // Enclosed in Arc namespace so automatic linking to other classes works
5 namespace Arc {
67 } // namespace Arc
68 
69 #ifndef __ARC_DATAPOINT_H__
70 #define __ARC_DATAPOINT_H__
71 
72 #include <list>
73 #include <set>
74 #include <string>
75 
76 #include <arc/DateTime.h>
77 #include <arc/URL.h>
78 #include <arc/UserConfig.h>
79 #include <arc/data/DataStatus.h>
80 #include <arc/data/FileInfo.h>
81 #include <arc/data/URLMap.h>
82 #include <arc/loader/Loader.h>
83 #include <arc/loader/Plugin.h>
84 
85 namespace Arc {
86 
87  class Logger;
88  class DataBuffer;
89  class DataCallback;
90  class XMLNode;
91  class CheckSum;
92 
94 
128  class DataPoint
129  : public Plugin {
130  public:
131 
133 
138  typedef void(*Callback3rdParty)(unsigned long long int bytes_transferred);
139 
141 
154  };
155 
167  };
168 
170 
184  static DataStatus Transfer3rdParty(const URL& source, const URL& destination,
185  const UserConfig& usercfg, Callback3rdParty callback = NULL);
186 
188  virtual ~DataPoint();
189 
191  virtual const URL& GetURL() const;
192 
194  virtual const UserConfig& GetUserConfig() const;
195 
197 
205  virtual bool SetURL(const URL& url);
206 
208  virtual std::string str() const;
209 
211  virtual operator bool() const;
212 
214  virtual bool operator!() const;
215 
217 
239  virtual DataStatus PrepareReading(unsigned int timeout,
240  unsigned int& wait_time);
241 
243 
265  virtual DataStatus PrepareWriting(unsigned int timeout,
266  unsigned int& wait_time);
267 
269 
280  virtual DataStatus StartReading(DataBuffer& buffer) = 0;
281 
283 
297  virtual DataStatus StartWriting(DataBuffer& buffer,
298  DataCallback *space_cb = NULL) = 0;
299 
301 
307  virtual DataStatus StopReading() = 0;
308 
310 
316  virtual DataStatus StopWriting() = 0;
317 
319 
326  virtual DataStatus FinishReading(bool error = false);
327 
329 
337  virtual DataStatus FinishWriting(bool error = false);
338 
340 
349  virtual DataStatus Check(bool check_meta) = 0;
350 
352  virtual DataStatus Remove() = 0;
353 
355 
367  virtual DataStatus Stat(FileInfo& file, DataPointInfoType verb = INFO_TYPE_ALL) = 0;
368 
370 
393  virtual DataStatus Stat(std::list<FileInfo>& files,
394  const std::list<DataPoint*>& urls,
395  DataPointInfoType verb = INFO_TYPE_ALL) = 0;
396 
398 
411  virtual DataStatus List(std::list<FileInfo>& files, DataPointInfoType verb = INFO_TYPE_ALL) = 0;
412 
414 
425  virtual DataStatus CreateDirectory(bool with_parents=false) = 0;
426 
428 
439  virtual DataStatus Rename(const URL& newurl) = 0;
440 
442 
449  virtual void ReadOutOfOrder(bool v) = 0;
450 
452  virtual bool WriteOutOfOrder() = 0;
453 
455 
460  virtual void SetAdditionalChecks(bool v) = 0;
461 
463  virtual bool GetAdditionalChecks() const = 0;
464 
466 
469  virtual void SetSecure(bool v) = 0;
470 
472  virtual bool GetSecure() const = 0;
473 
475 
478  virtual void Passive(bool v) = 0;
479 
481 
484  virtual DataStatus GetFailureReason(void) const;
485 
487 
493  virtual void Range(unsigned long long int start = 0,
494  unsigned long long int end = 0) = 0;
495 
497 
504  virtual DataStatus Resolve(bool source) = 0;
505 
507 
517  virtual DataStatus Resolve(bool source, const std::list<DataPoint*>& urls) = 0;
518 
520  virtual bool Registered() const = 0;
521 
523 
533  virtual DataStatus PreRegister(bool replication, bool force = false) = 0;
534 
536 
544  virtual DataStatus PostRegister(bool replication) = 0;
545 
547 
554  virtual DataStatus PreUnregister(bool replication) = 0;
555 
557 
564  virtual DataStatus Unregister(bool all) = 0;
565 
567  virtual bool CheckSize() const;
568 
570  virtual void SetSize(const unsigned long long int val);
571 
573  virtual unsigned long long int GetSize() const;
574 
576  virtual bool CheckCheckSum() const;
577 
579  virtual void SetCheckSum(const std::string& val);
580 
582  virtual const std::string& GetCheckSum() const;
583 
585  virtual const std::string DefaultCheckSum() const;
586 
588  virtual bool CheckModified() const;
589 
591  virtual void SetModified(const Time& val);
592 
594  virtual const Time& GetModified() const;
595 
597  virtual bool CheckValid() const;
598 
600  virtual void SetValid(const Time& val);
601 
603  virtual const Time& GetValid() const;
604 
606  virtual void SetAccessLatency(const DataPointAccessLatency& latency);
607 
610 
612  virtual long long int BufSize() const = 0;
613 
615  virtual int BufNum() const = 0;
616 
618  virtual bool Cache() const;
619 
621  virtual bool Local() const = 0;
622 
624  virtual bool ReadOnly() const = 0;
625 
627  virtual int GetTries() const;
628 
630  virtual void SetTries(const int n);
631 
633  virtual void NextTry();
634 
636  virtual bool RequiresCredentials() const;
637 
639 
645  virtual bool RequiresCredentialsInFile() const;
646 
648  virtual bool IsIndex() const = 0;
649 
651  virtual bool IsStageable() const;
652 
654  virtual bool AcceptsMeta() const = 0;
655 
657  virtual bool ProvidesMeta() const = 0;
658 
660 
664  virtual void SetMeta(const DataPoint& p);
665 
667 
671  virtual bool CompareMeta(const DataPoint& p) const;
672 
674 
684  virtual std::vector<URL> TransferLocations() const;
685 
687 
692  virtual void ClearTransferLocations() {};
693 
695  virtual const URL& CurrentLocation() const = 0;
696 
698 
701  virtual const std::string& CurrentLocationMetadata() const = 0;
702 
704  virtual DataPoint* CurrentLocationHandle() const = 0;
705 
707 
711  virtual DataStatus CompareLocationMetadata() const = 0;
712 
714 
719  virtual bool NextLocation() = 0;
720 
722  virtual bool LocationValid() const = 0;
723 
725  virtual bool LastLocation() = 0;
726 
728  virtual bool HaveLocations() const = 0;
729 
731 
737  virtual DataStatus AddLocation(const URL& url,
738  const std::string& meta) = 0;
739 
741  virtual DataStatus RemoveLocation() = 0;
742 
744  virtual DataStatus RemoveLocations(const DataPoint& p) = 0;
745 
747  virtual DataStatus ClearLocations() = 0;
748 
750 
755  virtual int AddCheckSumObject(CheckSum *cksum) = 0;
756 
758  virtual const CheckSum* GetCheckSumObject(int index) const = 0;
759 
761 
768  virtual void SortLocations(const std::string& pattern,
769  const URLMap& url_map) = 0;
770 
772 
776  virtual void AddURLOptions(const std::map<std::string, std::string>& options);
777 
778  protected:
783 
784  // attributes
786  unsigned long long int size;
788  std::string checksum;
798  DataStatus failure_code; /* filled by callback methods */
800  bool cache;
802  bool stageable;
804  std::set<std::string> valid_url_options;
805 
807  static Logger logger;
808 
810 
818  DataPoint(const URL& url, const UserConfig& usercfg, PluginArgument* parg);
819 
821 
829  virtual DataStatus Transfer3rdParty(const URL& source, const URL& destination, Callback3rdParty callback = NULL);
830  };
831 
833  class DataPointLoader
834  : public Loader {
835  private:
836  DataPointLoader();
837  ~DataPointLoader();
838  DataPoint* load(const URL& url, const UserConfig& usercfg);
839  friend class DataHandle;
840  };
844  class DataPointPluginArgument
845  : public PluginArgument {
846  public:
847  DataPointPluginArgument(const URL& url, const UserConfig& usercfg)
848  : url(url),
849  usercfg(usercfg) {}
850  ~DataPointPluginArgument() {}
851  operator const URL&() {
852  return url;
853  }
854  operator const UserConfig&() {
855  return usercfg;
856  }
857  private:
858  const URL& url;
859  const UserConfig& usercfg;
860  };
863 } // namespace Arc
864 
865 #endif // __ARC_DATAPOINT_H__