00001
00002
00003
00004
00056 #ifndef __ARC_DATAPOINT_H__
00057 #define __ARC_DATAPOINT_H__
00058
00059 #include <list>
00060 #include <set>
00061 #include <string>
00062
00063 #include <arc/DateTime.h>
00064 #include <arc/URL.h>
00065 #include <arc/UserConfig.h>
00066 #include <arc/data/DataStatus.h>
00067 #include <arc/data/FileInfo.h>
00068 #include <arc/data/URLMap.h>
00069 #include <arc/loader/Loader.h>
00070 #include <arc/loader/Plugin.h>
00071
00072 namespace Arc {
00073
00074 class Logger;
00075 class DataBuffer;
00076 class DataCallback;
00077 class XMLNode;
00078 class CheckSum;
00079
00081
00148 class DataPoint
00149 : public Plugin {
00150 public:
00151
00153
00158 enum DataPointAccessLatency {
00160 ACCESS_LATENCY_ZERO,
00162 ACCESS_LATENCY_SMALL,
00164 ACCESS_LATENCY_LARGE
00165 };
00166
00168 enum DataPointInfoType {
00169 INFO_TYPE_MINIMAL = 0,
00170 INFO_TYPE_NAME = 1,
00171 INFO_TYPE_TYPE = 2,
00172 INFO_TYPE_TIMES = 4,
00173 INFO_TYPE_CONTENT = 8,
00174 INFO_TYPE_ACCESS = 16,
00175 INFO_TYPE_STRUCT = 32,
00176 INFO_TYPE_REST = 64,
00177 INFO_TYPE_ALL = 127
00178 };
00179
00181 virtual ~DataPoint();
00182
00184 virtual const URL& GetURL() const;
00185
00187 virtual const UserConfig& GetUserConfig() const;
00188
00195 virtual bool SetURL(const URL& url);
00196
00198 virtual std::string str() const;
00199
00201 virtual operator bool() const;
00202
00204 virtual bool operator!() const;
00205
00207
00227 virtual DataStatus PrepareReading(unsigned int timeout,
00228 unsigned int& wait_time);
00229
00231
00251 virtual DataStatus PrepareWriting(unsigned int timeout,
00252 unsigned int& wait_time);
00253
00255
00260 virtual DataStatus StartReading(DataBuffer& buffer) = 0;
00261
00263
00271 virtual DataStatus StartWriting(DataBuffer& buffer,
00272 DataCallback *space_cb = NULL) = 0;
00273
00275
00279 virtual DataStatus StopReading() = 0;
00280
00282
00286 virtual DataStatus StopWriting() = 0;
00287
00289
00293 virtual DataStatus FinishReading(bool error = false);
00294
00296
00300 virtual DataStatus FinishWriting(bool error = false);
00301
00303
00306 virtual DataStatus Check() = 0;
00307
00309 virtual DataStatus Remove() = 0;
00310
00312
00321 virtual DataStatus Stat(FileInfo& file, DataPointInfoType verb = INFO_TYPE_ALL) = 0;
00322
00324
00343 virtual DataStatus Stat(std::list<FileInfo>& files,
00344 const std::list<DataPoint*>& urls,
00345 DataPointInfoType verb = INFO_TYPE_ALL) = 0;
00346
00348
00356 virtual DataStatus List(std::list<FileInfo>& files, DataPointInfoType verb = INFO_TYPE_ALL) = 0;
00357
00359
00366 virtual DataStatus CreateDirectory(bool with_parents=false) = 0;
00367
00370
00371 virtual void ReadOutOfOrder(bool v) = 0;
00372
00375 virtual bool WriteOutOfOrder() = 0;
00376
00378
00381 virtual void SetAdditionalChecks(bool v) = 0;
00382
00384 virtual bool GetAdditionalChecks() const = 0;
00385
00387
00388 virtual void SetSecure(bool v) = 0;
00389
00391 virtual bool GetSecure() const = 0;
00392
00395 virtual void Passive(bool v) = 0;
00396
00399 virtual DataStatus GetFailureReason(void) const;
00400
00402
00403 virtual void Range(unsigned long long int start = 0,
00404 unsigned long long int end = 0) = 0;
00405
00407
00410 virtual DataStatus Resolve(bool source) = 0;
00411
00413
00420 virtual DataStatus Resolve(bool source, const std::list<DataPoint*>& urls) = 0;
00421
00423
00424 virtual bool Registered() const = 0;
00425
00427
00436 virtual DataStatus PreRegister(bool replication, bool force = false) = 0;
00437
00439
00444 virtual DataStatus PostRegister(bool replication) = 0;
00445
00447
00452 virtual DataStatus PreUnregister(bool replication) = 0;
00453
00455
00459 virtual DataStatus Unregister(bool all) = 0;
00460
00462 virtual bool CheckSize() const;
00463
00465 virtual void SetSize(const unsigned long long int val);
00466
00468 virtual unsigned long long int GetSize() const;
00469
00471 virtual bool CheckCheckSum() const;
00472
00474 virtual void SetCheckSum(const std::string& val);
00475
00477 virtual const std::string& GetCheckSum() const;
00478
00480 virtual const std::string DefaultCheckSum() const;
00481
00483 virtual bool CheckCreated() const;
00484
00486 virtual void SetCreated(const Time& val);
00487
00489 virtual const Time& GetCreated() const;
00490
00492 virtual bool CheckValid() const;
00493
00495 virtual void SetValid(const Time& val);
00496
00498 virtual const Time& GetValid() const;
00499
00501 virtual void SetAccessLatency(const DataPointAccessLatency& latency);
00502
00504 virtual DataPointAccessLatency GetAccessLatency() const;
00505
00507 virtual long long int BufSize() const = 0;
00508
00510 virtual int BufNum() const = 0;
00511
00513 virtual bool Cache() const;
00514
00516 virtual bool Local() const = 0;
00517
00518
00519 virtual bool ReadOnly() const = 0;
00520
00522 virtual int GetTries() const;
00523
00525 virtual void SetTries(const int n);
00526
00528 virtual void NextTry(void);
00529
00531 virtual bool IsIndex() const = 0;
00532
00534 virtual bool IsStageable() const;
00535
00537 virtual bool AcceptsMeta() const = 0;
00538
00541 virtual bool ProvidesMeta() const = 0;
00542
00544
00546 virtual void SetMeta(const DataPoint& p);
00547
00549
00551 virtual bool CompareMeta(const DataPoint& p) const;
00552
00554
00563 virtual std::vector<URL> TransferLocations() const;
00564
00566 virtual const URL& CurrentLocation() const = 0;
00567
00569
00570 virtual const std::string& CurrentLocationMetadata() const = 0;
00571
00573 virtual DataPoint* CurrentLocationHandle() const = 0;
00574
00576
00578 virtual DataStatus CompareLocationMetadata() const = 0;
00579
00581
00583 virtual bool NextLocation() = 0;
00584
00586 virtual bool LocationValid() const = 0;
00587
00589 virtual bool LastLocation() = 0;
00590
00592 virtual bool HaveLocations() const = 0;
00593
00595
00597 virtual DataStatus AddLocation(const URL& url,
00598 const std::string& meta) = 0;
00599
00601 virtual DataStatus RemoveLocation() = 0;
00602
00604 virtual DataStatus RemoveLocations(const DataPoint& p) = 0;
00605
00607 virtual DataStatus ClearLocations() = 0;
00608
00613 virtual int AddCheckSumObject(CheckSum *cksum) = 0;
00614
00616 virtual const CheckSum* GetCheckSumObject(int index) const = 0;
00617
00620 virtual void SortLocations(const std::string& pattern,
00621 const URLMap& url_map) = 0;
00622
00625 virtual void AddURLOptions(const std::map<std::string, std::string>& options);
00626
00627 protected:
00628 URL url;
00629 const UserConfig usercfg;
00630
00631
00632 unsigned long long int size;
00633 std::string checksum;
00634 Time created;
00635 Time valid;
00636 DataPointAccessLatency access_latency;
00637 int triesleft;
00638 DataStatus failure_code;
00639 bool cache;
00640 bool stageable;
00642 std::set<std::string> valid_url_options;
00643
00644 static Logger logger;
00645
00647
00654 DataPoint(const URL& url, const UserConfig& usercfg, PluginArgument* parg);
00655 };
00656
00658 class DataPointLoader
00659 : public Loader {
00660 private:
00661 DataPointLoader();
00662 ~DataPointLoader();
00663 DataPoint* load(const URL& url, const UserConfig& usercfg);
00664 friend class DataHandle;
00665 };
00666
00668 class DataPointPluginArgument
00669 : public PluginArgument {
00670 public:
00671 DataPointPluginArgument(const URL& url, const UserConfig& usercfg)
00672 : url(url),
00673 usercfg(usercfg) {}
00674 ~DataPointPluginArgument() {}
00675 operator const URL&() {
00676 return url;
00677 }
00678 operator const UserConfig&() {
00679 return usercfg;
00680 }
00681 private:
00682 const URL& url;
00683 const UserConfig& usercfg;
00684 };
00685
00686 }
00687
00688 #endif // __ARC_DATAPOINT_H__