mirror of
https://github.com/fralx/LimeReport.git
synced 2025-11-25 00:18:06 +03:00
Define code style and format all source file using clang-format-14
except those placed in 3rdparty directories.
This commit is contained in:
@@ -28,58 +28,59 @@
|
||||
* GNU General Public License for more details. *
|
||||
****************************************************************************/
|
||||
#include "lrxmlwriter.h"
|
||||
|
||||
#include "lrbasedesignintf.h"
|
||||
#include "serializators/lrxmlserializatorsfactory.h"
|
||||
#include "lrcollection.h"
|
||||
#include "lrreporttranslation.h"
|
||||
#include "serializators/lrxmlserializatorsfactory.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
namespace LimeReport{
|
||||
namespace LimeReport {
|
||||
|
||||
XMLWriter::XMLWriter() : m_doc(new QDomDocument)
|
||||
{
|
||||
init();
|
||||
}
|
||||
XMLWriter::XMLWriter(): m_doc(new QDomDocument) { init(); }
|
||||
|
||||
XMLWriter::XMLWriter(QSharedPointer<QDomDocument> doc) : m_doc(doc){
|
||||
init();
|
||||
}
|
||||
XMLWriter::XMLWriter(QSharedPointer<QDomDocument> doc): m_doc(doc) { init(); }
|
||||
|
||||
void XMLWriter::init()
|
||||
{
|
||||
m_rootElement=m_doc->createElement("Report");
|
||||
QDomNode xmlNode = m_doc->createProcessingInstruction("xml",
|
||||
"version=\"1.0\" encoding=\"UTF8\"");
|
||||
m_doc->insertBefore(xmlNode,m_doc->firstChild());
|
||||
m_rootElement = m_doc->createElement("Report");
|
||||
QDomNode xmlNode
|
||||
= m_doc->createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF8\"");
|
||||
m_doc->insertBefore(xmlNode, m_doc->firstChild());
|
||||
m_doc->appendChild(m_rootElement);
|
||||
}
|
||||
|
||||
void XMLWriter::putItem(QObject *item)
|
||||
void XMLWriter::putItem(QObject* item)
|
||||
{
|
||||
QDomElement node=putQObjectItem(item->metaObject()->className(),item);
|
||||
if (!replaceNode(node,item)) m_rootElement.appendChild(node);
|
||||
QDomElement node = putQObjectItem(item->metaObject()->className(), item);
|
||||
if (!replaceNode(node, item))
|
||||
m_rootElement.appendChild(node);
|
||||
}
|
||||
|
||||
QString XMLWriter::extractClassName(QObject *item)
|
||||
QString XMLWriter::extractClassName(QObject* item)
|
||||
{
|
||||
BaseDesignIntf* baseItem = dynamic_cast<BaseDesignIntf*>(item);
|
||||
if(baseItem) return baseItem->storageTypeName();
|
||||
else return item->metaObject()->className();
|
||||
if (baseItem)
|
||||
return baseItem->storageTypeName();
|
||||
else
|
||||
return item->metaObject()->className();
|
||||
}
|
||||
|
||||
void XMLWriter::putChildQObjectItem(QString name, QObject *item, QDomElement *parentNode)
|
||||
{
|
||||
void XMLWriter::putChildQObjectItem(QString name, QObject* item, QDomElement* parentNode)
|
||||
{
|
||||
QDomElement itemNode = m_doc->createElement(name);
|
||||
itemNode.setAttribute("ClassName",extractClassName(item));
|
||||
itemNode.setAttribute("Type","Object");
|
||||
if (parentNode) parentNode->appendChild(itemNode);
|
||||
saveProperties(item,&itemNode);
|
||||
itemNode.setAttribute("ClassName", extractClassName(item));
|
||||
itemNode.setAttribute("Type", "Object");
|
||||
if (parentNode)
|
||||
parentNode->appendChild(itemNode);
|
||||
saveProperties(item, &itemNode);
|
||||
}
|
||||
|
||||
bool XMLWriter::setContent(QString fileName)
|
||||
{
|
||||
QFile xmlFile(fileName);
|
||||
if (xmlFile.open(QFile::ReadOnly)){
|
||||
if (xmlFile.open(QFile::ReadOnly)) {
|
||||
m_doc->setContent(&xmlFile);
|
||||
return true;
|
||||
}
|
||||
@@ -88,11 +89,12 @@ bool XMLWriter::setContent(QString fileName)
|
||||
|
||||
bool XMLWriter::saveToFile(QString fileName)
|
||||
{
|
||||
if ((m_doc->childNodes().count()==0)||fileName.isEmpty()) return false;
|
||||
if ((m_doc->childNodes().count() == 0) || fileName.isEmpty())
|
||||
return false;
|
||||
QFile xmlFile(fileName);
|
||||
if (xmlFile.open(QFile::WriteOnly)) {
|
||||
QTextStream buffer(&xmlFile);
|
||||
m_doc->save(buffer,2);
|
||||
m_doc->save(buffer, 2);
|
||||
xmlFile.close();
|
||||
return true;
|
||||
}
|
||||
@@ -103,7 +105,7 @@ QString XMLWriter::saveToString()
|
||||
{
|
||||
QString res;
|
||||
QTextStream buffer(&res);
|
||||
m_doc->save(buffer,2);
|
||||
m_doc->save(buffer, 2);
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -111,90 +113,95 @@ QByteArray XMLWriter::saveToByteArray()
|
||||
{
|
||||
QByteArray res;
|
||||
QTextStream buffer(&res);
|
||||
m_doc->save(buffer,2);
|
||||
m_doc->save(buffer, 2);
|
||||
return res;
|
||||
}
|
||||
|
||||
void XMLWriter::setPassPhrase(const QString &passPhrase)
|
||||
{
|
||||
m_passPhrase = passPhrase;
|
||||
}
|
||||
void XMLWriter::setPassPhrase(const QString& passPhrase) { m_passPhrase = passPhrase; }
|
||||
|
||||
QDomElement XMLWriter::putQObjectItem(QString name, QObject *item)
|
||||
QDomElement XMLWriter::putQObjectItem(QString name, QObject* item)
|
||||
{
|
||||
Q_UNUSED(name)
|
||||
QDomElement itemNode = m_doc->createElement("object");
|
||||
itemNode.setAttribute("ClassName",extractClassName(item));
|
||||
itemNode.setAttribute("Type","Object");
|
||||
saveProperties(item,&itemNode);
|
||||
itemNode.setAttribute("ClassName", extractClassName(item));
|
||||
itemNode.setAttribute("Type", "Object");
|
||||
saveProperties(item, &itemNode);
|
||||
return itemNode;
|
||||
}
|
||||
|
||||
void XMLWriter::saveProperty(QString name, QObject* item, QDomElement *node)
|
||||
void XMLWriter::saveProperty(QString name, QObject* item, QDomElement* node)
|
||||
{
|
||||
QString typeName;
|
||||
if (name.compare("itemIndexMethod")==0)
|
||||
typeName = item->metaObject()->property(item->metaObject()->indexOfProperty(name.toLatin1())).typeName();
|
||||
if (name.compare("itemIndexMethod") == 0)
|
||||
typeName = item->metaObject()
|
||||
->property(item->metaObject()->indexOfProperty(name.toLatin1()))
|
||||
.typeName();
|
||||
else
|
||||
typeName = item->property(name.toLatin1()).typeName();
|
||||
|
||||
CreateSerializator creator=0;
|
||||
if (isCollection(name, item)) { saveCollection(name,item,node); return; }
|
||||
if (isTranslation(name, item)) { saveTranslation(name, item, node); return; }
|
||||
CreateSerializator creator = 0;
|
||||
if (isCollection(name, item)) {
|
||||
saveCollection(name, item, node);
|
||||
return;
|
||||
}
|
||||
if (isTranslation(name, item)) {
|
||||
saveTranslation(name, item, node);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isQObject(name,item)) {
|
||||
if (qvariant_cast<QObject *>(item->property(name.toLatin1())))
|
||||
putQObjectProperty(name,qvariant_cast<QObject *>(item->property(name.toLatin1())),node);
|
||||
if (isQObject(name, item)) {
|
||||
if (qvariant_cast<QObject*>(item->property(name.toLatin1())))
|
||||
putQObjectProperty(name, qvariant_cast<QObject*>(item->property(name.toLatin1())),
|
||||
node);
|
||||
else {
|
||||
qDebug()<<"Warnig property can`t be casted to QObject"<<name;
|
||||
qDebug() << "Warnig property can`t be casted to QObject" << name;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (enumOrFlag(name,item))
|
||||
creator=XMLAbstractSerializatorFactory::instance().objectCreator(
|
||||
"enumAndFlags"
|
||||
);
|
||||
if (enumOrFlag(name, item))
|
||||
creator = XMLAbstractSerializatorFactory::instance().objectCreator("enumAndFlags");
|
||||
else
|
||||
try {
|
||||
creator=XMLAbstractSerializatorFactory::instance().objectCreator(typeName);
|
||||
} catch (LimeReport::ReportError &exception){
|
||||
qDebug()<<"class name ="<<item->metaObject()->className()
|
||||
<<"property name="<<name<<" property type="<<typeName
|
||||
<<exception.what();
|
||||
|
||||
}
|
||||
try {
|
||||
creator = XMLAbstractSerializatorFactory::instance().objectCreator(typeName);
|
||||
} catch (LimeReport::ReportError& exception) {
|
||||
qDebug() << "class name =" << item->metaObject()->className()
|
||||
<< "property name=" << name << " property type=" << typeName
|
||||
<< exception.what();
|
||||
}
|
||||
|
||||
if (creator) {
|
||||
QScopedPointer<SerializatorIntf> serializator(creator(m_doc.data(),node));
|
||||
QScopedPointer<SerializatorIntf> serializator(creator(m_doc.data(), node));
|
||||
CryptedSerializator* cs = dynamic_cast<CryptedSerializator*>(serializator.data());
|
||||
if (cs){
|
||||
if (cs) {
|
||||
cs->setPassPhrase(m_passPhrase);
|
||||
}
|
||||
serializator->save(
|
||||
item->property(name.toLatin1()),
|
||||
name
|
||||
);
|
||||
serializator->save(item->property(name.toLatin1()), name);
|
||||
}
|
||||
}
|
||||
|
||||
void XMLWriter::saveProperties(QObject *item, QDomElement *node)
|
||||
void XMLWriter::saveProperties(QObject* item, QDomElement* node)
|
||||
{
|
||||
for (int i=0;i<item->metaObject()->propertyCount();i++){
|
||||
saveProperty(item->metaObject()->property(i).name(),item,node);
|
||||
for (int i = 0; i < item->metaObject()->propertyCount(); i++) {
|
||||
saveProperty(item->metaObject()->property(i).name(), item, node);
|
||||
}
|
||||
}
|
||||
|
||||
bool XMLWriter::enumOrFlag(QString name, QObject *item)
|
||||
bool XMLWriter::enumOrFlag(QString name, QObject* item)
|
||||
{
|
||||
return item->metaObject()->property(item->metaObject()->indexOfProperty(name.toLatin1())).isFlagType() ||
|
||||
item->metaObject()->property(item->metaObject()->indexOfProperty(name.toLatin1())).isEnumType();
|
||||
return item->metaObject()
|
||||
->property(item->metaObject()->indexOfProperty(name.toLatin1()))
|
||||
.isFlagType()
|
||||
|| item->metaObject()
|
||||
->property(item->metaObject()->indexOfProperty(name.toLatin1()))
|
||||
.isEnumType();
|
||||
}
|
||||
|
||||
bool XMLWriter::isCollection(QString propertyName, QObject* item)
|
||||
{
|
||||
QMetaProperty prop=item->metaObject()->property(item->metaObject()->indexOfProperty(propertyName.toLatin1()));
|
||||
//TODO: Migrate to QMetaType
|
||||
QMetaProperty prop = item->metaObject()->property(
|
||||
item->metaObject()->indexOfProperty(propertyName.toLatin1()));
|
||||
// TODO: Migrate to QMetaType
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
return QMetaType::fromName(prop.typeName()).id() == COLLECTION_TYPE_ID;
|
||||
#else
|
||||
@@ -204,8 +211,9 @@ bool XMLWriter::isCollection(QString propertyName, QObject* item)
|
||||
|
||||
bool XMLWriter::isTranslation(QString propertyName, QObject* item)
|
||||
{
|
||||
QMetaProperty prop=item->metaObject()->property(item->metaObject()->indexOfProperty(propertyName.toLatin1()));
|
||||
//TODO: Migrate to QMetaType
|
||||
QMetaProperty prop = item->metaObject()->property(
|
||||
item->metaObject()->indexOfProperty(propertyName.toLatin1()));
|
||||
// TODO: Migrate to QMetaType
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
return QMetaType::fromName(prop.typeName()).id() == TRANSLATION_TYPE_ID;
|
||||
#else
|
||||
@@ -213,14 +221,14 @@ bool XMLWriter::isTranslation(QString propertyName, QObject* item)
|
||||
#endif
|
||||
}
|
||||
|
||||
void XMLWriter::saveCollection(QString propertyName, QObject *item, QDomElement *node)
|
||||
void XMLWriter::saveCollection(QString propertyName, QObject* item, QDomElement* node)
|
||||
{
|
||||
ICollectionContainer * collection = dynamic_cast<ICollectionContainer*>(item);
|
||||
QDomElement collectionNode=m_doc->createElement(propertyName);
|
||||
collectionNode.setAttribute("Type","Collection");
|
||||
ICollectionContainer* collection = dynamic_cast<ICollectionContainer*>(item);
|
||||
QDomElement collectionNode = m_doc->createElement(propertyName);
|
||||
collectionNode.setAttribute("Type", "Collection");
|
||||
|
||||
for(int i=0;i<collection->elementsCount(propertyName);i++){
|
||||
putCollectionItem(collection->elementAt(propertyName,i),&collectionNode);
|
||||
for (int i = 0; i < collection->elementsCount(propertyName); i++) {
|
||||
putCollectionItem(collection->elementAt(propertyName, i), &collectionNode);
|
||||
}
|
||||
|
||||
node->appendChild(collectionNode);
|
||||
@@ -229,26 +237,27 @@ void XMLWriter::saveCollection(QString propertyName, QObject *item, QDomElement
|
||||
void XMLWriter::saveTranslation(QString propertyName, QObject* item, QDomElement* node)
|
||||
{
|
||||
ITranslationContainer* translationsContainer = dynamic_cast<ITranslationContainer*>(item);
|
||||
if (translationsContainer){
|
||||
QDomElement translationsNode=m_doc->createElement(propertyName);
|
||||
translationsNode.setAttribute("Type","Translation");
|
||||
if (translationsContainer) {
|
||||
QDomElement translationsNode = m_doc->createElement(propertyName);
|
||||
translationsNode.setAttribute("Type", "Translation");
|
||||
Translations* translations = translationsContainer->translations();
|
||||
foreach(QLocale::Language language, translations->keys()){
|
||||
QDomElement languageNode = m_doc->createElement(QLocale::languageToString(language).replace(' ', '_'));
|
||||
languageNode.setAttribute("Value",QString::number(language));
|
||||
foreach (QLocale::Language language, translations->keys()) {
|
||||
QDomElement languageNode
|
||||
= m_doc->createElement(QLocale::languageToString(language).replace(' ', '_'));
|
||||
languageNode.setAttribute("Value", QString::number(language));
|
||||
translationsNode.appendChild(languageNode);
|
||||
ReportTranslation* curTranslation = translations->value(language);
|
||||
foreach(PageTranslation* page, curTranslation->pagesTranslation()){
|
||||
foreach (PageTranslation* page, curTranslation->pagesTranslation()) {
|
||||
QDomElement pageNode = m_doc->createElement(page->pageName);
|
||||
languageNode.appendChild(pageNode);
|
||||
foreach(ItemTranslation* item, page->itemsTranslation){
|
||||
foreach (ItemTranslation* item, page->itemsTranslation) {
|
||||
QDomElement itemNode = m_doc->createElement(item->itemName);
|
||||
foreach(PropertyTranslation* property, item->propertyesTranslation){
|
||||
if (property->sourceValue.compare(property->value) != 0){
|
||||
foreach (PropertyTranslation* property, item->propertyesTranslation) {
|
||||
if (property->sourceValue.compare(property->value) != 0) {
|
||||
QDomElement propertyNode = m_doc->createElement(property->propertyName);
|
||||
propertyNode.setAttribute("Value",property->value);
|
||||
propertyNode.setAttribute("Value", property->value);
|
||||
propertyNode.setAttribute("SourceValue", property->sourceValue);
|
||||
propertyNode.setAttribute("Checked", property->checked ? "Y":"N");
|
||||
propertyNode.setAttribute("Checked", property->checked ? "Y" : "N");
|
||||
itemNode.appendChild(propertyNode);
|
||||
}
|
||||
}
|
||||
@@ -259,53 +268,44 @@ void XMLWriter::saveTranslation(QString propertyName, QObject* item, QDomElement
|
||||
}
|
||||
node->appendChild(translationsNode);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool XMLWriter::isQObject(QString propertyName, QObject *item)
|
||||
bool XMLWriter::isQObject(QString propertyName, QObject* item)
|
||||
{
|
||||
QMetaProperty prop=item->metaObject()->property(item->metaObject()->indexOfProperty(propertyName.toLatin1()));
|
||||
//TODO: Migrate to QMetaType
|
||||
QMetaProperty prop = item->metaObject()->property(
|
||||
item->metaObject()->indexOfProperty(propertyName.toLatin1()));
|
||||
// TODO: Migrate to QMetaType
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
return QMetaType::fromName(prop.typeName()).id() == QMetaType::QObjectStar;
|
||||
#else
|
||||
return QMetaType::type(prop.typeName()) == QMetaType::QObjectStar;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
bool XMLWriter::replaceNode(QDomElement node, QObject* item)
|
||||
{
|
||||
QDomElement element = m_rootElement.firstChildElement(item->metaObject()->className());
|
||||
while (!element.isNull()){
|
||||
while (!element.isNull()) {
|
||||
QDomElement objectName = element.firstChildElement(QLatin1String("objectName"));
|
||||
if (!objectName.isNull()&&(objectName.text()==item->objectName())){
|
||||
QDomElement removeElement=element;
|
||||
element=element.nextSiblingElement(item->metaObject()->className());
|
||||
m_rootElement.replaceChild(node,removeElement);
|
||||
if (!objectName.isNull() && (objectName.text() == item->objectName())) {
|
||||
QDomElement removeElement = element;
|
||||
element = element.nextSiblingElement(item->metaObject()->className());
|
||||
m_rootElement.replaceChild(node, removeElement);
|
||||
return true;
|
||||
}
|
||||
else element=element.nextSiblingElement(item->metaObject()->className());
|
||||
} else
|
||||
element = element.nextSiblingElement(item->metaObject()->className());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void XMLWriter::putCollectionItem(QObject *item, QDomElement *parentNode)
|
||||
void XMLWriter::putCollectionItem(QObject* item, QDomElement* parentNode)
|
||||
{
|
||||
putChildQObjectItem("item",item,parentNode);
|
||||
putChildQObjectItem("item", item, parentNode);
|
||||
}
|
||||
|
||||
void XMLWriter::putQObjectProperty(QString propertyName, QObject* item, QDomElement* parentNode)
|
||||
{
|
||||
putChildQObjectItem(propertyName,item,parentNode);
|
||||
putChildQObjectItem(propertyName, item, parentNode);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace LimeReport
|
||||
|
||||
Reference in New Issue
Block a user