zypp::MediaSetAccess Class Reference

Media access layer responsible for handling files distributed on a set of media with media change and abort/retry/ingore user callback handling. More...

#include <MediaSetAccess.h>

Inheritance diagram for zypp::MediaSetAccess:
[legend]

List of all members.

Public Types

enum  ProvideFileOption { PROVIDE_DEFAULT = 0x0, PROVIDE_NON_INTERACTIVE = 0x1 }

Public Member Functions

 MediaSetAccess (const Url &url, const Pathname &prefered_attach_point="")
 Creates a callback enabled media access for specified url.
 MediaSetAccess (const std::string &label_r, const Url &url, const Pathname &prefered_attach_point="")
 ~MediaSetAccess ()
void setVerifier (unsigned media_nr, media::MediaVerifierRef verifier)
 Sets a MediaVerifier verifier for given media number.
const std::string & label () const
 The label identifing this media set and to be sent in a media change request.
void setLabel (const std::string &label_r)
 Set the label identifing this media set and to be sent in a media change request.
 ZYPP_DECLARE_FLAGS (ProvideFileOptions, ProvideFileOption)
Pathname provideFile (const OnMediaLocation &resource, ProvideFileOptions options=PROVIDE_DEFAULT)
 Provides a file from a media location.
Pathname provideFile (const Pathname &file, unsigned media_nr=1, ProvideFileOptions options=PROVIDE_DEFAULT)
 Provides file from media media_nr.
void releaseFile (const OnMediaLocation &resource)
 Release file from media.
void releaseFile (const Pathname &file, unsigned media_nr=1)
 Release file from media.
Pathname provideDir (const Pathname &dir, bool recursive, unsigned media_nr=1, ProvideFileOptions options=PROVIDE_DEFAULT)
 Provides direcotry dir from media number media_nr.
bool doesFileExist (const Pathname &file, unsigned media_nr=1)
 Checks if a file exists on the specified media, with user callbacks.
void dirInfo (filesystem::DirContent &retlist, const Pathname &dirname, bool dots=true, unsigned media_nr=1)
 Fills retlist with directory information.
void release ()
 Release all attached media of this set.

Static Public Member Functions

static Url rewriteUrl (const Url &url_r, const media::MediaNr medianr)
 Replaces media number in specified url with given medianr.

Protected Types

typedef function< void(media::MediaAccessId,
const Pathname &)> 
ProvideOperation

Protected Member Functions

Pathname provideFileInternal (const OnMediaLocation &resource, ProvideFileOptions options)
 Provides the file from medium number media_nr and returns its local path.
void provide (ProvideOperation op, const OnMediaLocation &resource, ProvideFileOptions options)
media::MediaAccessId getMediaAccessId (media::MediaNr medianr)
virtual std::ostream & dumpOn (std::ostream &str) const
 Overload to realize std::ostream & operator<<.

Private Types

typedef std::map
< media::MediaNr,
media::MediaAccessId
MediaMap
typedef std::map
< media::MediaNr,
media::MediaVerifierRef
VerifierMap

Private Attributes

Url _url
 Media or media set URL.
Pathname _prefAttachPoint
 Prefered mount point.
std::string _label
MediaMap _medias
 Mapping between media number and Media Access ID.
VerifierMap _verifiers
 Mapping between media number and corespondent verifier.

Friends

std::ostream & operator<< (std::ostream &str, const MediaSetAccess &obj)


Detailed Description

Media access layer responsible for handling files distributed on a set of media with media change and abort/retry/ingore user callback handling.

This is provided as a means to handle CD or DVD sets accessible through dir, iso, nfs or other URL schemes other than cd/dvd (see MediaManager for info on different implemented media backends). Currently it handles URLs containing cdN, CDN, dvdN, and DVDN strings, where N is the number of particular media in the set.

Examples:

 "iso:/?iso=/path/to/iso/images/openSUSE-10.3-Alpha2plus-DVD-x86_64-DVD1.iso"
 "dir:/path/to/cdset/sources/openSUSE-10.3/Alpha2plus/CD1"

MediaSetAccess accesses files on desired media by rewriting the original URL, replacing the digit (usually) 1 with requested media number and uses MediaManager to get the files from the new URL.

Additionaly, each media number can be assined a media verifier which checks if the media we are trying to access is the desired one. See MediaVerifierBase for more info.

Code example:

 Url url("dir:/path/to/cdset/sources/openSUSE-10.3/Alpha2plus/CD1");

 MediaSetAccess access(url);

 access.setVerifier(1, media1VerifierRef);
 access.setVerifier(2, media2VerifierRef);

 Pathname file1 = "/some/file/on/media1";
 Pathname providedfile1 = access.provideFile(file1, 1);
 Pathname file2 = "/some/file/on/media2";
 Pathname providedfile2 = access.provideFile(file1, 2);

Definition at line 77 of file MediaSetAccess.h.


Member Typedef Documentation

typedef function<void( media::MediaAccessId, const Pathname & )> zypp::MediaSetAccess::ProvideOperation [protected]

Definition at line 269 of file MediaSetAccess.h.

Definition at line 290 of file MediaSetAccess.h.

Definition at line 291 of file MediaSetAccess.h.


Member Enumeration Documentation

Enumerator:
PROVIDE_DEFAULT  The user is not asked anything, and the error exception is just propagated.
PROVIDE_NON_INTERACTIVE 

Definition at line 111 of file MediaSetAccess.h.


Constructor & Destructor Documentation

zypp::MediaSetAccess::MediaSetAccess ( const Url url,
const Pathname &  prefered_attach_point = "" 
)

Creates a callback enabled media access for specified url.

Parameters:
url 
prefered_attach_point Prefered attach (mount) point. Use, if you want to mount the media to a specific directory.

Definition at line 31 of file MediaSetAccess.cc.

zypp::MediaSetAccess::MediaSetAccess ( const std::string &  label_r,
const Url url,
const Pathname &  prefered_attach_point = "" 
)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 37 of file MediaSetAccess.cc.

zypp::MediaSetAccess::~MediaSetAccess (  ) 

Definition at line 45 of file MediaSetAccess.cc.

References release().


Member Function Documentation

void zypp::MediaSetAccess::setVerifier ( unsigned  media_nr,
media::MediaVerifierRef  verifier 
)

Sets a MediaVerifier verifier for given media number.

Definition at line 55 of file MediaSetAccess.cc.

References _medias, _verifiers, and zypp::media::MediaManager::addVerifier().

const std::string& zypp::MediaSetAccess::label (  )  const [inline]

The label identifing this media set and to be sent in a media change request.

Definition at line 102 of file MediaSetAccess.h.

References _label.

void zypp::MediaSetAccess::setLabel ( const std::string &  label_r  )  [inline]

Set the label identifing this media set and to be sent in a media change request.

Definition at line 108 of file MediaSetAccess.h.

References _label.

zypp::MediaSetAccess::ZYPP_DECLARE_FLAGS ( ProvideFileOptions  ,
ProvideFileOption   
)

Pathname zypp::MediaSetAccess::provideFile ( const OnMediaLocation resource,
ProvideFileOptions  options = PROVIDE_DEFAULT 
)

Provides a file from a media location.

Parameters:
resource location of the file on media
Returns:
local pathname of the requested file
Exceptions:
MediaException if a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
SkipRequestException if a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.
If the resource is marked as optional, no Exception is thrown and Pathname() is returned

Note:
interaction with the user does not ocurr if ProvideFileOptions::NON_INTERACTIVE is set.

OnMediaLocation::optional() hint has no effect on the transfer.

See also:
zypp::media::MediaManager::provideFile()

Definition at line 157 of file MediaSetAccess.cc.

References provide(), and zypp::ProvideFileOperation::result.

Referenced by zypp::Fetcher::Impl::provideToDest(), zypp::readRepoFile(), zypp::repo::yum::Downloader::status(), and zypp::repo::susetags::Downloader::status().

Pathname zypp::MediaSetAccess::provideFile ( const Pathname &  file,
unsigned  media_nr = 1,
ProvideFileOptions  options = PROVIDE_DEFAULT 
)

Provides file from media media_nr.

Parameters:
file path to the file relative to media URL
media_nr the media number in the media set
Returns:
local pathname of the requested file
Note:
interaction with the user does not ocurr if ProvideFileOptions::NON_INTERACTIVE is set.

OnMediaLocation::optional() hint has no effect on the transfer.

Exceptions:
MediaException if a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
SkipRequestException if a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.
See also:
zypp::media::MediaManager::provideFile()

Definition at line 164 of file MediaSetAccess.cc.

References provide(), zypp::ProvideFileOperation::result, and zypp::OnMediaLocation::setLocation().

void zypp::MediaSetAccess::releaseFile ( const OnMediaLocation resource  ) 

Release file from media.

This signal that file is not needed anymore.

Parameters:
resource location of the file on media

Definition at line 74 of file MediaSetAccess.cc.

References zypp::OnMediaLocation::filename(), and zypp::OnMediaLocation::medianr().

Referenced by zypp::Fetcher::Impl::provideToDest().

void zypp::MediaSetAccess::releaseFile ( const Pathname &  file,
unsigned  media_nr = 1 
)

Release file from media.

This signal that file is not needed anymore.

Parameters:
file path to the file relative to media URL
media_nr the media number in the media set

Definition at line 79 of file MediaSetAccess.cc.

References DBG, getMediaAccessId(), zypp::media::MediaManager::isAttached(), and zypp::media::MediaManager::releaseFile().

Pathname zypp::MediaSetAccess::provideDir ( const Pathname &  dir,
bool  recursive,
unsigned  media_nr = 1,
ProvideFileOptions  options = PROVIDE_DEFAULT 
)

Provides direcotry dir from media number media_nr.

Parameters:
dir path to the directory relative to media URL
recursive whether to provide the whole directory subtree
media_nr the media number in the media set
Returns:
local pathname of the requested directory
Exceptions:
MediaException if a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
Todo:
throw SkipRequestException if a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.
See also:
zypp::media::MediaManager::provideDir()

zypp::media::MediaManager::provideDirTree()

Definition at line 322 of file MediaSetAccess.cc.

References provide(), zypp::ProvideDirOperation::result, zypp::ProvideDirTreeOperation::result, and zypp::OnMediaLocation::setLocation().

bool zypp::MediaSetAccess::doesFileExist ( const Pathname &  file,
unsigned  media_nr = 1 
)

Checks if a file exists on the specified media, with user callbacks.

Parameters:
file file to check
media_nr Media number
Exceptions:
MediaException if a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
SkipRequestException if a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.
See also:
zypp::media::MediaManager::doesFileExist(MediaAccessId,const Pathname&)

Definition at line 173 of file MediaSetAccess.cc.

References provide(), PROVIDE_DEFAULT, zypp::ProvideFileExistenceOperation::result, and zypp::OnMediaLocation::setLocation().

Referenced by zypp::RepoManager::probe(), and zypp::RepoManager::probeService().

void zypp::MediaSetAccess::dirInfo ( filesystem::DirContent retlist,
const Pathname &  dirname,
bool  dots = true,
unsigned  media_nr = 1 
)

void zypp::MediaSetAccess::release (  ) 

Release all attached media of this set.

Exceptions:
MediaNotOpenException for invalid access IDs.

Definition at line 422 of file MediaSetAccess.cc.

References _medias, DBG, and zypp::media::MediaManager::release().

Referenced by ~MediaSetAccess().

Url zypp::MediaSetAccess::rewriteUrl ( const Url url_r,
const media::MediaNr  medianr 
) [static]

Replaces media number in specified url with given medianr.

Media number in the URL is searched for with regex "^(.*(cd|dvd))([0-9]+)(\\.iso)$" for iso scheme and with "^(.*(cd|dvd))([0-9]+)(/?)$" for other schemes.

For cd and dvd scheme it returns the original URL, as well as for URL which do not match the above regexes.

Parameters:
url_r original URL
medianr requested media number
Returns:
rewritten URL if applicable, the original URL otherwise

Definition at line 379 of file MediaSetAccess.cc.

References DBG, zypp::Url::getPathName(), zypp::Url::getQueryParam(), zypp::Url::getScheme(), zypp::str::regex::icase, zypp::str::numstring(), zypp::str::regex_match(), zypp::Url::setPathName(), zypp::Url::setQueryParam(), and url.

Referenced by getMediaAccessId().

Pathname zypp::MediaSetAccess::provideFileInternal ( const OnMediaLocation resource,
ProvideFileOptions  options 
) [protected]

Provides the file from medium number media_nr and returns its local path.

Note:
The method must not throw if checkonly is true.
Exceptions:
MediaException checkonly is false and a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
SkipRequestException checkonly is false and a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.

void zypp::MediaSetAccess::provide ( ProvideOperation  op,
const OnMediaLocation resource,
ProvideFileOptions  options 
) [protected]

media::MediaAccessId zypp::MediaSetAccess::getMediaAccessId ( media::MediaNr  medianr  )  [protected]

std::ostream & zypp::MediaSetAccess::dumpOn ( std::ostream &  str  )  const [protected, virtual]

Overload to realize std::ostream & operator<<.

Reimplemented from zypp::base::ReferenceCounted.

Definition at line 430 of file MediaSetAccess.cc.

References _prefAttachPoint, and _url.


Friends And Related Function Documentation

std::ostream & operator<< ( std::ostream &  str,
const MediaSetAccess obj 
) [friend]

Stream output

Definition at line 302 of file MediaSetAccess.h.


Member Data Documentation

Media or media set URL.

Definition at line 278 of file MediaSetAccess.h.

Referenced by dumpOn(), getMediaAccessId(), and provide().

Prefered mount point.

See also:
MediaManager::open(Url,Pathname)

MediaHandler::_attachPoint

Definition at line 286 of file MediaSetAccess.h.

Referenced by dumpOn(), and getMediaAccessId().

std::string zypp::MediaSetAccess::_label [private]

Definition at line 288 of file MediaSetAccess.h.

Referenced by label(), provide(), and setLabel().

Mapping between media number and Media Access ID.

Definition at line 294 of file MediaSetAccess.h.

Referenced by getMediaAccessId(), provide(), release(), and setVerifier().

Mapping between media number and corespondent verifier.

Definition at line 296 of file MediaSetAccess.h.

Referenced by getMediaAccessId(), and setVerifier().


The documentation for this class was generated from the following files:

doxygen