C++ Library to handle BagIt structures. BagIt is a standard format to create transfer packages for digital preservation purposes. See https://en.wikipedia.org/wiki/BagIt for details http://andreas-romeyke.de
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.2 KiB

// Copyright (C) 2018 Andreas Romeyke (art1@andreas-romeyke.de), 2018.
//
// 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 3 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, see <https://www.gnu.org/licenses/>.
#ifndef LIBCBAG_BAGMETADATA
#define LIBCBAG_BAGMETADATA
#include <string>
#include <map>
#include <sstream>
#include <ctime>
#include "checksum.hpp"
using namespace std;
enum {
SourceOrganization,
OrganizationAddress,
ContactName,
ContactPhone,
ContactEmail,
ExternalDescription,
BaggingDate,
ExternalIdentifier,
BagSize,
PayloadOxum,
BagGroupIdentifier,
BagCount,
InternalSenderIdentifier,
InternalSenderDescription,
};
class Bagmetadata{
private:
map<string,string> metadata;
bool exist_bagmetadata_file;
stringstream log;
public:
Bagmetadata( string basedir );
string get_SourceOrganization();
string get_OrganizationAddress();
string get_ContactName();
string get_ContactPhone();
string get_ContactEmail();
string get_ExternalDescription();
string get_BaggingDate();
string get_ExternalIdentifier();
string get_BagSize();
oxum_t get_PayloadOxum();
string get_BagGroupIdentifier();
string get_BagCount();
string get_InternalSenderIdentifier();
string get_InternalSenderDescription();
bool has_SourceOrganization();
bool has_OrganizationAddress();
bool has_ContactName();
bool has_ContactPhone();
bool has_ContactEmail();
bool has_ExternalDescription();
bool has_BaggingDate();
bool has_ExternalIdentifier();
bool has_BagSize();
bool has_PayloadOxum();
bool has_BagGroupIdentifier();
bool has_BagCount();
bool has_InternalSenderIdentifier();
bool has_InternalSenderDescription();
void set_SourceOrganization( string );
void set_OrganizationAddress( string );
void set_ContactName( string );
void set_ContactPhone( string );
void set_ContactEmail( string );
void set_ExternalDescription( string );
void set_BaggingDate( string );
void set_BaggingDate( time_t );
void set_ExternalIdentifier( string );
void set_BagSize( string );
void set_BagSize(long long unsigned int bytes); // count of bytes, the method calcs the human readable string
void set_PayloadOxum( oxum_t );
void set_BagGroupIdentifier( string );
void set_BagCount( string );
void set_InternalSenderIdentifier( string );
void set_InternalSenderDescription( string );
map<string,string> get_metadata();
void set_metadata(map<string,string> &);
bool has_metadata();
bool validate();
bool store( string basedir);
void get_logstream( stringstream & log);
void reset_logstream();
};
#endif
// vim: set tabstop=4 softtabstop=0 expandtab shiftwidth=4 smarttab