125 lines
4.1 KiB
C++
125 lines
4.1 KiB
C++
//----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) 2003 Intel Corporation
|
|
//
|
|
// File: CimSerializer.h
|
|
//
|
|
// Contents: Singleton object and functions for serialization, declarations.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef CIMSERIALIZER_H
|
|
#define CIMSERIALIZER_H 1
|
|
|
|
#include <string>
|
|
#include <algorithm>
|
|
|
|
#include "CimUtils.h"
|
|
#include "CimReference.h"
|
|
#include "CimDateTime.h"
|
|
|
|
|
|
namespace Intel
|
|
{
|
|
namespace Manageability
|
|
{
|
|
namespace Cim
|
|
{
|
|
namespace Untyped
|
|
{
|
|
|
|
//using namespace Intel::WSManagement;;
|
|
using Intel::Manageability::Exceptions::ConversionException;
|
|
using Intel::Manageability::Cim::Utils::TypeConverter;
|
|
using Intel::Manageability::Cim::Utils::VectorFieldData;
|
|
using Intel::Manageability::Cim::Utils::FieldData;
|
|
//using Intel::Manageability::Cim::CimReference;
|
|
|
|
// Singleton class!
|
|
class CIMUNTYPEDFRAMEWORK_API CimSerializer {
|
|
public:
|
|
// Singleton access function.
|
|
static const CimSerializer *GetSerializer();
|
|
|
|
// Serialize data in VectorFieldData into xml string.
|
|
std::string Serialize(const string &objectName, const string &nameSpace,
|
|
const string &uri, const string &prefix, const VectorFieldData &v,
|
|
bool includeRoot = true, bool delegateNs = false) const;
|
|
|
|
std::string SerializeFullEPR(const CimReference &reference) const;
|
|
std::string SerializeEPR(const CimReference &reference) const;
|
|
const CimReference DeserializeEPR(const std::string &xml) const;
|
|
|
|
string SerializeDateTime(const CimDateTime &dateTime) const;
|
|
const CimDateTime DeserializeDateTime(string xml) const;
|
|
|
|
// Serialize data in VectorFieldData into xml string.
|
|
// Here, the VectorFieldData contains the attribute value to
|
|
// use in the tag, for example:
|
|
// <innertag attribute="first-val">second-value</inntertag>.
|
|
std::string SerializeAttributed(const string &rootTag,
|
|
const string &innerTag, const string &attribute,
|
|
const string &nameSpace,
|
|
const string &uri, const string &prefix,
|
|
const VectorFieldData &v, bool includeRoot = true) const;
|
|
|
|
// Deserialize xml, return VectorFieldData and set objectName and prefix.
|
|
// Only late binding objects should use this one since they need
|
|
// all the information from the XML returned by the AMT firmware.
|
|
const VectorFieldData Deserialize(const std::string &xml, string &objectName,
|
|
string &prefix, string &resourceURI) const;
|
|
|
|
// Deserialize xml, return VectorFieldData
|
|
// This one is used by CimBase and descendants since they
|
|
// know the namespace info etc.
|
|
const VectorFieldData Deserialize(const std::string &xml) const;
|
|
|
|
// Deserialize data, where the attribute values are the names and the
|
|
// xml element values are the values. For example,
|
|
// <foo Name="answer">42</foo> puts answer/name into vfd.
|
|
const VectorFieldData DeserializeAttributed(const std::string &xml,
|
|
const string &attribute) const;
|
|
|
|
void DeserializeItem(const std::string &itemXml, std::string &firstXml, std::string &secondXml) const;
|
|
private:
|
|
// Constructor.
|
|
CimSerializer();
|
|
|
|
// Destructor.
|
|
~CimSerializer();
|
|
|
|
// Called once at program exit, see the code.
|
|
static void CleanUpXmlLibray();
|
|
|
|
// Helpers
|
|
string SerializeDateTimeAbsolute(const CimDateTimeAbsolute &dateTime) const;
|
|
CimDateTimeAbsolute DeserializeDateTimeAbsolute(const string &dateTime) const;
|
|
|
|
string SerializeDateTimeInterval(const CimDateTimeInterval &dateTime) const;
|
|
CimDateTimeInterval DeserializeDateTimeInterval(const string &interval) const;
|
|
|
|
void DeserializeDateInterval(const string& dateString, unsigned long& days) const;
|
|
void DeserializeTimeInterval(const string& timeString, unsigned short& hours, unsigned short& minutes, unsigned short& seconds, unsigned long& microseconds) const;
|
|
|
|
template<typename T>
|
|
void GetValueIfExists(string::const_iterator& begin, const string::const_iterator& end, char separator, T& value) const
|
|
{
|
|
string::const_iterator found = find(begin, end, separator);
|
|
if (found != end)
|
|
{
|
|
TypeConverter::StringToType(string(begin, found), value);
|
|
begin = found + 1;
|
|
}
|
|
}
|
|
|
|
// Singleton stuff.
|
|
static bool initialized;
|
|
};
|
|
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
#endif // CIMSERIALIZER_H
|