klayout/src/tl/tlWebDAV.h

153 lines
3.3 KiB
C++

/*
KLayout Layout Viewer
Copyright (C) 2006-2017 Matthias Koefferlein
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef HDR_tlWebDAV
#define HDR_tlWebDAV
#include "tlCommon.h"
#include <string>
#include <vector>
namespace tl
{
/**
* @brief Represents an item in a WebDAV collection
*/
class TL_PUBLIC WebDAVItem
{
public:
/**
* @brief Default constructor
*/
WebDAVItem ()
: m_is_collection (false)
{
// .. nothing yet ..
}
/**
* @brief Constructor
*/
WebDAVItem (bool is_collection, const std::string &url, const std::string &name)
: m_is_collection (is_collection), m_url (url), m_name (name)
{
// .. nothing yet ..
}
/**
* @brief Gets a value indicating whether this item is a collection
* If false, it's a file.
*/
bool is_collection () const
{
return m_is_collection;
}
/**
* @brief Gets the URL of this item
*/
const std::string &url () const
{
return m_url;
}
/**
* @brief Gets the name of this item
* The name is only valid for sub-items.
*/
const std::string &name () const
{
return m_name;
}
protected:
bool m_is_collection;
std::string m_url;
std::string m_name;
};
/**
* @brief Represents an object from a WebDAV URL
* This object can be a file or collection
*/
class TL_PUBLIC WebDAVObject
: public WebDAVItem
{
public:
typedef std::vector<WebDAVItem> container;
typedef container::const_iterator iterator;
/**
* @brief Open a stream with the given URL
*/
WebDAVObject ();
/**
* @brief Populates the collection from the given URL
* The depth value can be 0 (self only) or 1 (self + collection members).
*/
void read (const std::string &url, int depth);
/**
* @brief Gets the items of this collection (begin iterator)
*/
iterator begin () const
{
return m_items.begin ();
}
/**
* @brief Gets the items of this collection (begin iterator)
*/
iterator end () const
{
return m_items.end ();
}
/**
* @brief Downloads the collection or file with the given URL
*
* This method will download the WebDAV object from url to the file path
* given in "target".
*
* For file download, the target must be the path of the target file.
* For collection download, the target must be a directory path. In this
* case, the target directory must exist already.
*
* Sub-directories are created if required.
*
* This method throws an exception if the directory structure could
* not be obtained or downloading of one file failed.
*/
static bool download (const std::string &url, const std::string &target);
private:
container m_items;
};
}
#endif