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 {
64 } // namespace Arc
65 
66 #ifndef __ARC_DATAPOINT_H__
67 #define __ARC_DATAPOINT_H__
68 
69 #include <list>
70 #include <set>
71 #include <string>
72 
73 #include <arc/DateTime.h>
74 #include <arc/URL.h>
75 #include <arc/UserConfig.h>
76 #include <arc/data/DataStatus.h>
77 #include <arc/data/FileInfo.h>
78 #include <arc/data/URLMap.h>
79 #include <arc/loader/Loader.h>
80 #include <arc/loader/Plugin.h>
81 
82 namespace Arc {
83 
84  class Logger;
85  class DataBuffer;
86  class DataCallback;
87  class XMLNode;
88  class CheckSum;
89 
91 
125  class DataPoint
126  : public Plugin {
127  public:
128 
130 
135  typedef void(*Callback3rdParty)(unsigned long long int bytes_transferred);
136 
138 
151  };
152 
164  };
165 
167 
181  static DataStatus Transfer3rdParty(const URL& source, const URL& destination,
182  const UserConfig& usercfg, Callback3rdParty callback = NULL);
183 
185  virtual ~DataPoint();
186 
188  virtual const URL& GetURL() const;
189 
191  virtual const UserConfig& GetUserConfig() const;
192 
194 
202  virtual bool SetURL(const URL& url);
203 
205  virtual std::string str() const;
206 
208  virtual operator bool() const;
209 
211  virtual bool operator!() const;
212 
214 
236  virtual DataStatus PrepareReading(unsigned int timeout,
237  unsigned int& wait_time);
238 
240 
262  virtual DataStatus PrepareWriting(unsigned int timeout,
263  unsigned int& wait_time);
264 
266 
277  virtual DataStatus StartReading(DataBuffer& buffer) = 0;
278 
280 
294  virtual DataStatus StartWriting(DataBuffer& buffer,
295  DataCallback *space_cb = NULL) = 0;
296 
298 
304  virtual DataStatus StopReading() = 0;
305 
307 
313  virtual DataStatus StopWriting() = 0;
314 
316 
323  virtual DataStatus FinishReading(bool error = false);
324 
326 
334  virtual DataStatus FinishWriting(bool error = false);
335 
337 
346  virtual DataStatus Check(bool check_meta) = 0;
347 
349  virtual DataStatus Remove() = 0;
350 
352 
364  virtual DataStatus Stat(FileInfo& file, DataPointInfoType verb = INFO_TYPE_ALL) = 0;
365 
367 
390  virtual DataStatus Stat(std::list<FileInfo>& files,
391  const std::list<DataPoint*>& urls,
392  DataPointInfoType verb = INFO_TYPE_ALL) = 0;
393 
395 
408  virtual DataStatus List(std::list<FileInfo>& files, DataPointInfoType verb = INFO_TYPE_ALL) = 0;
409 
411 
422  virtual DataStatus CreateDirectory(bool with_parents=false) = 0;
423 
425 
436  virtual DataStatus Rename(const URL& newurl) = 0;
437 
439 
446  virtual void ReadOutOfOrder(bool v) = 0;
447 
449  virtual bool WriteOutOfOrder() = 0;
450 
452 
457  virtual void SetAdditionalChecks(bool v) = 0;
458 
460  virtual bool GetAdditionalChecks() const = 0;
461 
463 
466  virtual void SetSecure(bool v) = 0;
467 
469  virtual bool GetSecure() const = 0;
470 
472 
475  virtual void Passive(bool v) = 0;
476 
478 
481  virtual DataStatus GetFailureReason(void) const;
482 
484 
490  virtual void Range(unsigned long long int start = 0,
491  unsigned long long int end = 0) = 0;
492 
494 
501  virtual DataStatus Resolve(bool source) = 0;
502 
504 
514  virtual DataStatus Resolve(bool source, const std::list<DataPoint*>& urls) = 0;
515 
517  virtual bool Registered() const = 0;
518 
520 
530  virtual DataStatus PreRegister(bool replication, bool force = false) = 0;
531 
533 
541  virtual DataStatus PostRegister(bool replication) = 0;
542 
544 
551  virtual DataStatus PreUnregister(bool replication) = 0;
552 
554 
561  virtual DataStatus Unregister(bool all) = 0;
562 
564  virtual bool CheckSize() const;
565 
567  virtual void SetSize(const unsigned long long int val);
568 
570  virtual unsigned long long int GetSize() const;
571 
573  virtual bool CheckCheckSum() const;
574 
576  virtual void SetCheckSum(const std::string& val);
577 
579  virtual const std::string& GetCheckSum() const;
580 
582  virtual const std::string DefaultCheckSum() const;
583 
585  virtual bool CheckModified() const;
586 
588  virtual void SetModified(const Time& val);
589 
591  virtual const Time& GetModified() const;
592 
594  virtual bool CheckValid() const;
595 
597  virtual void SetValid(const Time& val);
598 
600  virtual const Time& GetValid() const;
601 
603  virtual void SetAccessLatency(const DataPointAccessLatency& latency);
604 
607 
609  virtual long long int BufSize() const = 0;
610 
612  virtual int BufNum() const = 0;
613 
615  virtual bool Cache() const;
616 
618  virtual bool Local() const = 0;
619 
621  virtual bool ReadOnly() const = 0;
622 
624  virtual int GetTries() const;
625 
627  virtual void SetTries(const int n);
628 
630  virtual void NextTry();
631 
633  virtual bool RequiresCredentials() const;
634 
636 
641  virtual bool RequiresCredentialsInFile() const;
642 
644  virtual bool IsIndex() const = 0;
645 
647  virtual bool IsStageable() const;
648 
650  virtual bool AcceptsMeta() const = 0;
651 
653  virtual bool ProvidesMeta() const = 0;
654 
656 
660  virtual void SetMeta(const DataPoint& p);
661 
663 
667  virtual bool CompareMeta(const DataPoint& p) const;
668 
670 
680  virtual std::vector<URL> TransferLocations() const;
681 
683  virtual const URL& CurrentLocation() const = 0;
684 
686 
689  virtual const std::string& CurrentLocationMetadata() const = 0;
690 
692  virtual DataPoint* CurrentLocationHandle() const = 0;
693 
695 
699  virtual DataStatus CompareLocationMetadata() const = 0;
700 
702 
707  virtual bool NextLocation() = 0;
708 
710  virtual bool LocationValid() const = 0;
711 
713  virtual bool LastLocation() = 0;
714 
716  virtual bool HaveLocations() const = 0;
717 
719 
725  virtual DataStatus AddLocation(const URL& url,
726  const std::string& meta) = 0;
727 
729  virtual DataStatus RemoveLocation() = 0;
730 
732  virtual DataStatus RemoveLocations(const DataPoint& p) = 0;
733 
735  virtual DataStatus ClearLocations() = 0;
736 
738 
743  virtual int AddCheckSumObject(CheckSum *cksum) = 0;
744 
746  virtual const CheckSum* GetCheckSumObject(int index) const = 0;
747 
749 
756  virtual void SortLocations(const std::string& pattern,
757  const URLMap& url_map) = 0;
758 
760 
764  virtual void AddURLOptions(const std::map<std::string, std::string>& options);
765 
766  protected:
771 
772  // attributes
774  unsigned long long int size;
776  std::string checksum;
786  DataStatus failure_code; /* filled by callback methods */
788  bool cache;
790  bool stageable;
792  std::set<std::string> valid_url_options;
793 
795  static Logger logger;
796 
798 
806  DataPoint(const URL& url, const UserConfig& usercfg, PluginArgument* parg);
807 
809 
817  virtual DataStatus Transfer3rdParty(const URL& source, const URL& destination, Callback3rdParty callback = NULL);
818  };
819 
821  class DataPointLoader
822  : public Loader {
823  private:
824  DataPointLoader();
825  ~DataPointLoader();
826  DataPoint* load(const URL& url, const UserConfig& usercfg);
827  friend class DataHandle;
828  };
832  class DataPointPluginArgument
833  : public PluginArgument {
834  public:
835  DataPointPluginArgument(const URL& url, const UserConfig& usercfg)
836  : url(url),
837  usercfg(usercfg) {}
838  ~DataPointPluginArgument() {}
839  operator const URL&() {
840  return url;
841  }
842  operator const UserConfig&() {
843  return usercfg;
844  }
845  private:
846  const URL& url;
847  const UserConfig& usercfg;
848  };
851 } // namespace Arc
852 
853 #endif // __ARC_DATAPOINT_H__