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 {
61 } // namespace Arc
62 
63 #ifndef __ARC_DATAPOINT_H__
64 #define __ARC_DATAPOINT_H__
65 
66 #include <list>
67 #include <set>
68 #include <string>
69 
70 #include <arc/DateTime.h>
71 #include <arc/URL.h>
72 #include <arc/UserConfig.h>
73 #include <arc/data/DataStatus.h>
74 #include <arc/data/FileInfo.h>
75 #include <arc/data/URLMap.h>
76 #include <arc/loader/Loader.h>
77 #include <arc/loader/Plugin.h>
78 
79 namespace Arc {
80 
81  class Logger;
82  class DataBuffer;
83  class DataCallback;
84  class XMLNode;
85  class CheckSum;
86 
88 
122  class DataPoint
123  : public Plugin {
124  public:
125 
127 
132  typedef void(*Callback3rdParty)(unsigned long long int bytes_transferred);
133 
135 
148  };
149 
161  };
162 
164 
178  static DataStatus Transfer3rdParty(const URL& source, const URL& destination,
179  const UserConfig& usercfg, Callback3rdParty callback = NULL);
180 
182  virtual ~DataPoint();
183 
185  virtual const URL& GetURL() const;
186 
188  virtual const UserConfig& GetUserConfig() const;
189 
191 
199  virtual bool SetURL(const URL& url);
200 
202  virtual std::string str() const;
203 
205  virtual operator bool() const;
206 
208  virtual bool operator!() const;
209 
211 
233  virtual DataStatus PrepareReading(unsigned int timeout,
234  unsigned int& wait_time);
235 
237 
259  virtual DataStatus PrepareWriting(unsigned int timeout,
260  unsigned int& wait_time);
261 
263 
274  virtual DataStatus StartReading(DataBuffer& buffer) = 0;
275 
277 
291  virtual DataStatus StartWriting(DataBuffer& buffer,
292  DataCallback *space_cb = NULL) = 0;
293 
295 
301  virtual DataStatus StopReading() = 0;
302 
304 
310  virtual DataStatus StopWriting() = 0;
311 
313 
320  virtual DataStatus FinishReading(bool error = false);
321 
323 
331  virtual DataStatus FinishWriting(bool error = false);
332 
334 
343  virtual DataStatus Check(bool check_meta) = 0;
344 
346  virtual DataStatus Remove() = 0;
347 
349 
361  virtual DataStatus Stat(FileInfo& file, DataPointInfoType verb = INFO_TYPE_ALL) = 0;
362 
364 
387  virtual DataStatus Stat(std::list<FileInfo>& files,
388  const std::list<DataPoint*>& urls,
389  DataPointInfoType verb = INFO_TYPE_ALL) = 0;
390 
392 
405  virtual DataStatus List(std::list<FileInfo>& files, DataPointInfoType verb = INFO_TYPE_ALL) = 0;
406 
408 
419  virtual DataStatus CreateDirectory(bool with_parents=false) = 0;
420 
422 
433  virtual DataStatus Rename(const URL& newurl) = 0;
434 
436 
443  virtual void ReadOutOfOrder(bool v) = 0;
444 
446  virtual bool WriteOutOfOrder() = 0;
447 
449 
454  virtual void SetAdditionalChecks(bool v) = 0;
455 
457  virtual bool GetAdditionalChecks() const = 0;
458 
460 
463  virtual void SetSecure(bool v) = 0;
464 
466  virtual bool GetSecure() const = 0;
467 
469 
472  virtual void Passive(bool v) = 0;
473 
475 
478  virtual DataStatus GetFailureReason(void) const;
479 
481 
487  virtual void Range(unsigned long long int start = 0,
488  unsigned long long int end = 0) = 0;
489 
491 
498  virtual DataStatus Resolve(bool source) = 0;
499 
501 
511  virtual DataStatus Resolve(bool source, const std::list<DataPoint*>& urls) = 0;
512 
514  virtual bool Registered() const = 0;
515 
517 
527  virtual DataStatus PreRegister(bool replication, bool force = false) = 0;
528 
530 
538  virtual DataStatus PostRegister(bool replication) = 0;
539 
541 
548  virtual DataStatus PreUnregister(bool replication) = 0;
549 
551 
558  virtual DataStatus Unregister(bool all) = 0;
559 
561  virtual bool CheckSize() const;
562 
564  virtual void SetSize(const unsigned long long int val);
565 
567  virtual unsigned long long int GetSize() const;
568 
570  virtual bool CheckCheckSum() const;
571 
573  virtual void SetCheckSum(const std::string& val);
574 
576  virtual const std::string& GetCheckSum() const;
577 
579  virtual const std::string DefaultCheckSum() const;
580 
582  virtual bool CheckModified() const;
583 
585  virtual void SetModified(const Time& val);
586 
588  virtual const Time& GetModified() const;
589 
591  virtual bool CheckValid() const;
592 
594  virtual void SetValid(const Time& val);
595 
597  virtual const Time& GetValid() const;
598 
600  virtual void SetAccessLatency(const DataPointAccessLatency& latency);
601 
604 
606  virtual long long int BufSize() const = 0;
607 
609  virtual int BufNum() const = 0;
610 
612  virtual bool Cache() const;
613 
615  virtual bool Local() const = 0;
616 
618  virtual bool ReadOnly() const = 0;
619 
621  virtual int GetTries() const;
622 
624  virtual void SetTries(const int n);
625 
627  virtual void NextTry();
628 
630  virtual bool RequiresCredentials() const;
631 
633 
639  virtual bool RequiresCredentialsInFile() const;
640 
642  virtual bool IsIndex() const = 0;
643 
645  virtual bool IsStageable() const;
646 
648  virtual bool AcceptsMeta() const = 0;
649 
651  virtual bool ProvidesMeta() const = 0;
652 
654 
658  virtual void SetMeta(const DataPoint& p);
659 
661 
665  virtual bool CompareMeta(const DataPoint& p) const;
666 
668 
678  virtual std::vector<URL> TransferLocations() const;
679 
681 
686  virtual void ClearTransferLocations() {};
687 
689  virtual const URL& CurrentLocation() const = 0;
690 
692 
695  virtual const std::string& CurrentLocationMetadata() const = 0;
696 
698  virtual DataPoint* CurrentLocationHandle() const = 0;
699 
701 
705  virtual DataStatus CompareLocationMetadata() const = 0;
706 
708 
713  virtual bool NextLocation() = 0;
714 
716  virtual bool LocationValid() const = 0;
717 
719  virtual bool LastLocation() = 0;
720 
722  virtual bool HaveLocations() const = 0;
723 
725 
731  virtual DataStatus AddLocation(const URL& url,
732  const std::string& meta) = 0;
733 
735  virtual DataStatus RemoveLocation() = 0;
736 
738  virtual DataStatus RemoveLocations(const DataPoint& p) = 0;
739 
741  virtual DataStatus ClearLocations() = 0;
742 
744 
749  virtual int AddCheckSumObject(CheckSum *cksum) = 0;
750 
752  virtual const CheckSum* GetCheckSumObject(int index) const = 0;
753 
755 
762  virtual void SortLocations(const std::string& pattern,
763  const URLMap& url_map) = 0;
764 
766 
770  virtual void AddURLOptions(const std::map<std::string, std::string>& options);
771 
772  protected:
777 
778  // attributes
780  unsigned long long int size;
782  std::string checksum;
792  DataStatus failure_code; /* filled by callback methods */
794  bool cache;
796  bool stageable;
798  std::set<std::string> valid_url_options;
799 
801  static Logger logger;
802 
804 
812  DataPoint(const URL& url, const UserConfig& usercfg, PluginArgument* parg);
813 
815 
823  virtual DataStatus Transfer3rdParty(const URL& source, const URL& destination, Callback3rdParty callback = NULL);
824  };
825 
827  class DataPointLoader
828  : public Loader {
829  private:
830  DataPointLoader();
831  ~DataPointLoader();
832  DataPoint* load(const URL& url, const UserConfig& usercfg);
833  friend class DataHandle;
834  };
838  class DataPointPluginArgument
839  : public PluginArgument {
840  public:
841  DataPointPluginArgument(const URL& url, const UserConfig& usercfg)
842  : url(url),
843  usercfg(usercfg) {}
844  ~DataPointPluginArgument() {}
845  operator const URL&() {
846  return url;
847  }
848  operator const UserConfig&() {
849  return usercfg;
850  }
851  private:
852  const URL& url;
853  const UserConfig& usercfg;
854  };
857 } // namespace Arc
858 
859 #endif // __ARC_DATAPOINT_H__