Remove obsolete ResStatus bits.
[platform/upstream/libzypp.git] / zypp / OnMediaLocation.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/source/OnMediaLocation.h
10  *
11 */
12 #ifndef ZYPP_SOURCE_ONMEDIALOCATION_H
13 #define ZYPP_SOURCE_ONMEDIALOCATION_H
14
15 #include <iosfwd>
16
17 #include "zypp/base/Deprecated.h"
18 #include "zypp/Pathname.h"
19 #include "zypp/ByteCount.h"
20 #include "zypp/CheckSum.h"
21
22 ///////////////////////////////////////////////////////////////////
23 namespace zypp
24 { /////////////////////////////////////////////////////////////////
25
26   ///////////////////////////////////////////////////////////////////
27   //
28   //    CLASS NAME : OnMediaLocation
29   //
30   /**
31    * Describes a path on a certain media amongs as the information
32    * required to download it, like its media number, checksum and
33    * size. It does not specify the URI of the file.
34    *
35    * Media number \c 0 usually indicates no media access.
36    *
37    * \todo Implement cheap copy via COW.
38   */
39   class OnMediaLocation
40   {
41     friend std::ostream & operator<<( std::ostream & str, const OnMediaLocation & obj );
42
43   public:
44     /** Default ctor indicating no media access. */
45     OnMediaLocation()
46     : _medianr( 0 )
47     , _optional(false)
48     {}
49
50     /** Ctor taking a filename and media number (defaults to 1). */
51     OnMediaLocation( const Pathname & filename_r, unsigned medianr_r = 1 )
52     : _medianr( medianr_r )
53     , _filename( filename_r )
54     , _optional(false) // bnc #447010
55     {}
56
57   public:
58     /**
59      * media number where the resource is located.
60      * for a url cd:// this could be 1..N.
61      * for a url of type http://host/path/CD1, a media number 2
62      * means looking on http://host/path/CD1/../CD2
63      */
64     unsigned          medianr()        const { return _medianr; }
65     /**
66      * The path to the resource relatve to the url and path.
67      * If the base is http://novell.com/download/repository, the
68      * resource filename could be "/repodata/repomd.xml"
69      */
70     const Pathname &  filename()       const { return _filename; }
71     /**
72      * the checksum of the resource
73      */
74     const CheckSum &  checksum()       const { return _checksum; }
75     /**
76      * The size of the resource on the server. Therefore
77      * the size of the download.
78      */
79     const ByteCount & downloadSize()   const { return _downloadsize; }
80     /**
81      * The size of the resource once it has been uncompressed
82      * or unpacked.
83      * If the file is file.txt.gz then this is the size of
84      * file.txt
85      */
86     const ByteCount & openSize()       const { return _opendownloadsize; }
87     /**
88      * The checksum of the resource once it has been uncompressed
89      * or unpacked.
90      * If the file is file.txt.gz then this is the checksum of
91      * file.txt
92      */
93     const CheckSum &  openChecksum()   const { return _openchecksum; }
94     /**
95      * whether this is an optional resource. That is a file that
96      * may not be present. This is just a hint to the resource
97      * downloader to not error in case the not found resource is
98      * not found.
99      */
100     const bool optional() const { return _optional; }
101
102   public:
103     /** Unset \c filename and set \c medianr to \c 0. */
104     OnMediaLocation & unsetLocation()
105     { _filename = Pathname(); _medianr = 0; return *this; }
106
107     /** Set filename and media number (defaults to \c 1). */
108     OnMediaLocation & setLocation( const Pathname & val_r,
109                                    unsigned mediaNumber_r = 1 )
110     { _filename = val_r; _medianr = mediaNumber_r; return *this; }
111
112    /** Set the files size. */
113     OnMediaLocation & setDownloadSize( const ByteCount & val_r )
114     { _downloadsize = val_r; return *this; }
115
116     /** Set the files checksum. */
117     OnMediaLocation & setChecksum( const CheckSum & val_r )
118     { _checksum = val_r; return *this; }
119
120     /** Set the files open (uncompressed) size. */
121     OnMediaLocation & setOpenSize( const ByteCount & val_r )
122     { _opendownloadsize = val_r; return *this; }
123
124     /** Set the files open (uncompressed) checksum. */
125     OnMediaLocation & setOpenChecksum( const CheckSum & val_r )
126     { _openchecksum = val_r; return *this; }
127
128     /**
129      * Set the wether the resource is optional or not
130      * \see optional
131      */
132     OnMediaLocation & setOptional( bool val )
133     { _optional = val; return *this; }
134
135   public:
136    /**
137     * Individual manipulation of \c medianr (prefer \ref setLocation).
138     * Using \ref setLocation is prefered as us usually have to adjust
139     * \c filename and \c medianr in sync.
140     */
141     OnMediaLocation & changeMedianr( unsigned val_r )
142     { _medianr = val_r; return *this; }
143
144     /**
145      * Individual manipulation of \c filename (prefer \ref setLocation).
146      * Using \ref setLocation is preferedas us usually have to adjust
147      * \c filename and \c medianr in sync.
148      */
149     OnMediaLocation & changeFilename( const Pathname & val_r )
150     { _filename = val_r; return *this; }
151
152   private:
153     unsigned  _medianr;
154     Pathname  _filename;
155     CheckSum  _checksum;
156     ByteCount _downloadsize;
157     ByteCount _opendownloadsize;
158     CheckSum  _openchecksum;
159     bool      _optional;
160   };
161   ///////////////////////////////////////////////////////////////////
162
163   /** \relates OnMediaLocation Stream output */
164   std::ostream & operator<<( std::ostream & str, const OnMediaLocation & obj );
165
166   /////////////////////////////////////////////////////////////////
167 } // namespace zypp
168 ///////////////////////////////////////////////////////////////////
169 #endif // ZYPP_SOURCE_ONMEDIALOCATION_H