PublishingData implements IPublishingData interface.

Change-Id: Ic2438a94cc5ef4a59b2234729255ee6d18a02916
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Radovan Zivkovic
2013-10-11 11:10:26 +02:00
committed by Oswald Buddenhagen
parent 790012e701
commit 1acbf03101
8 changed files with 109 additions and 54 deletions

View File

@@ -27,4 +27,5 @@ HEADERS += \
interfaces/itoolfiles.h \ interfaces/itoolfiles.h \
interfaces/iplatform.h \ interfaces/iplatform.h \
interfaces/iplatforms.h \ interfaces/iplatforms.h \
interfaces/ipublishingitem.h interfaces/ipublishingitem.h \
interfaces/ipublishingdata.h

View File

@@ -0,0 +1,55 @@
/**************************************************************************
**
** Copyright (c) 2013 Bojan Petrovic
** Copyright (c) 2013 Radovan Zivkovic
** Contact: http://www.qt-project.org/legal
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
****************************************************************************/
#ifndef VCPROJECTMANAGER_INTERNAL_IPUBLISHINGDATA_H
#define VCPROJECTMANAGER_INTERNAL_IPUBLISHINGDATA_H
#include "../vcprojectmodel/ivcprojectnodemodel.h"
namespace VcProjectManager {
namespace Internal {
class IPublishingItem;
class IAttributeContainer;
class IPublishingData : public IVcProjectXMLNode
{
public :
virtual ~IPublishingData() {}
virtual void addPublishingItem(IPublishingItem *item) = 0;
virtual void removePublishingItem(IPublishingItem *item) = 0;
virtual int publishingItemCount() const = 0;
virtual IPublishingItem* publishingItem(int index) const = 0;
virtual IAttributeContainer* attributeContainer() const = 0;
};
} // Internal
} // VcProjectManager
#endif // VCPROJECTMANAGER_INTERNAL_IPUBLISHINGDATA_H

View File

@@ -42,6 +42,7 @@ class IPublishingItem : public IVcProjectXMLNode
public: public:
virtual ~IPublishingItem() {} virtual ~IPublishingItem() {}
virtual IAttributeContainer* attributeContainer() const = 0; virtual IAttributeContainer* attributeContainer() const = 0;
virtual IPublishingItem* clone() const = 0;
}; };
} // Internal } // Internal
} // VcProjectManager } // VcProjectManager

View File

@@ -30,6 +30,8 @@
#include "publishingdata.h" #include "publishingdata.h"
#include "generalattributecontainer.h" #include "generalattributecontainer.h"
#include <utils/qtcassert.h>
namespace VcProjectManager { namespace VcProjectManager {
namespace Internal { namespace Internal {
@@ -43,8 +45,8 @@ PublishingData::PublishingData(const PublishingData &data)
m_attributeContainer = new GeneralAttributeContainer; m_attributeContainer = new GeneralAttributeContainer;
*m_attributeContainer = *data.m_attributeContainer; *m_attributeContainer = *data.m_attributeContainer;
foreach (const PublishingItem::Ptr &item, data.m_publishingItems) foreach (const IPublishingItem *item, data.m_publishingItems)
m_publishingItems.append(PublishingItem::Ptr(new PublishingItem(*item))); m_publishingItems.append(item->clone());
} }
PublishingData &PublishingData::operator =(const PublishingData &data) PublishingData &PublishingData::operator =(const PublishingData &data)
@@ -52,16 +54,18 @@ PublishingData &PublishingData::operator =(const PublishingData &data)
if (this != &data) { if (this != &data) {
*m_attributeContainer = *data.m_attributeContainer; *m_attributeContainer = *data.m_attributeContainer;
qDeleteAll(m_publishingItems);
m_publishingItems.clear(); m_publishingItems.clear();
foreach (const PublishingItem::Ptr &item, data.m_publishingItems) foreach (const IPublishingItem *item, data.m_publishingItems)
m_publishingItems.append(PublishingItem::Ptr(new PublishingItem(*item))); m_publishingItems.append(item->clone());
} }
return *this; return *this;
} }
PublishingData::~PublishingData() PublishingData::~PublishingData()
{ {
m_publishingItems.clear(); qDeleteAll(m_publishingItems);
delete m_attributeContainer;
} }
void PublishingData::processNode(const QDomNode &node) void PublishingData::processNode(const QDomNode &node)
@@ -90,20 +94,42 @@ QDomNode PublishingData::toXMLDomNode(QDomDocument &domXMLDocument) const
QDomElement publishingDataNode = domXMLDocument.createElement(QLatin1String("PublishingData")); QDomElement publishingDataNode = domXMLDocument.createElement(QLatin1String("PublishingData"));
m_attributeContainer->appendToXMLNode(publishingDataNode); m_attributeContainer->appendToXMLNode(publishingDataNode);
foreach (const PublishingItem::Ptr &publish, m_publishingItems) foreach (const IPublishingItem *publish, m_publishingItems)
publishingDataNode.appendChild(publish->toXMLDomNode(domXMLDocument)); publishingDataNode.appendChild(publish->toXMLDomNode(domXMLDocument));
return publishingDataNode; return publishingDataNode;
} }
bool PublishingData::isEmpty() const void PublishingData::addPublishingItem(IPublishingItem *item)
{ {
return m_publishingItems.isEmpty() && !m_attributeContainer->getAttributeCount(); if (!item || m_publishingItems.contains(item))
return;
m_publishingItems.append(item);
}
void PublishingData::removePublishingItem(IPublishingItem *item)
{
if (!item || !m_publishingItems.contains(item))
return;
m_publishingItems.removeOne(item);
delete item;
}
int PublishingData::publishingItemCount() const
{
return m_publishingItems.size();
}
IPublishingItem *PublishingData::publishingItem(int index) const
{
QTC_ASSERT(0 <= index && index < m_publishingItems.size(), return 0);
return m_publishingItems[index];
} }
void PublishingData::processPublishingItem(const QDomNode &publishingItemNode) void PublishingData::processPublishingItem(const QDomNode &publishingItemNode)
{ {
PublishingItem::Ptr publishingItem(new PublishingItem); PublishingItem *publishingItem(new PublishingItem);
m_publishingItems.append(publishingItem); m_publishingItems.append(publishingItem);
publishingItem->processNode(publishingItemNode); publishingItem->processNode(publishingItemNode);
@@ -113,35 +139,6 @@ void PublishingData::processPublishingItem(const QDomNode &publishingItemNode)
processPublishingItem(nextSibling); processPublishingItem(nextSibling);
} }
void PublishingData::addPublishingItem(PublishingItem::Ptr item)
{
if (m_publishingItems.contains(item))
return;
m_publishingItems.append(item);
}
void PublishingData::removePublishingItem(PublishingItem::Ptr item)
{
m_publishingItems.removeAll(item);
}
QList<PublishingItem::Ptr> PublishingData::publishingItems() const
{
return m_publishingItems;
}
QList<PublishingItem::Ptr> PublishingData::publishingItems(const QString &attributeName, const QString &attributeValue) const
{
QList<PublishingItem::Ptr> items;
foreach (const PublishingItem::Ptr &item, m_publishingItems) {
if (item->attributeContainer()->attributeValue(attributeName) == attributeValue)
items.append(item);
}
return items;
}
IAttributeContainer *PublishingData::attributeContainer() const IAttributeContainer *PublishingData::attributeContainer() const
{ {
return m_attributeContainer; return m_attributeContainer;

View File

@@ -30,7 +30,7 @@
#ifndef VCPROJECTMANAGER_INTERNAL_PUBLISHINGDATA_H #ifndef VCPROJECTMANAGER_INTERNAL_PUBLISHINGDATA_H
#define VCPROJECTMANAGER_INTERNAL_PUBLISHINGDATA_H #define VCPROJECTMANAGER_INTERNAL_PUBLISHINGDATA_H
#include "ivcprojectnodemodel.h" #include "../interfaces/ipublishingdata.h"
#include "publishingitem.h" #include "publishingitem.h"
@@ -40,7 +40,7 @@ namespace Internal {
class IAttributeContainer; class IAttributeContainer;
class GeneralAttributeContainer; class GeneralAttributeContainer;
class PublishingData : public IVcProjectXMLNode class PublishingData : public IPublishingData
{ {
public: public:
typedef QSharedPointer<PublishingData> Ptr; typedef QSharedPointer<PublishingData> Ptr;
@@ -54,21 +54,17 @@ public:
VcNodeWidget* createSettingsWidget(); VcNodeWidget* createSettingsWidget();
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const; QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
bool isEmpty() const; void addPublishingItem(IPublishingItem *item);
void removePublishingItem(IPublishingItem *item);
void processPublishingItem(const QDomNode &publishingItem); int publishingItemCount() const;
IPublishingItem *publishingItem(int index) const;
void addPublishingItem(PublishingItem::Ptr item);
void removePublishingItem(PublishingItem::Ptr item);
QList<PublishingItem::Ptr> publishingItems() const;
QList<PublishingItem::Ptr> publishingItems(const QString &attributeName, const QString &attributeValue) const;
IAttributeContainer* attributeContainer() const; IAttributeContainer* attributeContainer() const;
private: private:
void processPublishingItem(const QDomNode &publishingItem);
void processNodeAttributes(const QDomElement &element); void processNodeAttributes(const QDomElement &element);
QList<PublishingItem::Ptr> m_publishingItems; QList<IPublishingItem *> m_publishingItems;
GeneralAttributeContainer *m_attributeContainer; GeneralAttributeContainer *m_attributeContainer;
}; };

View File

@@ -81,6 +81,11 @@ IAttributeContainer *PublishingItem::attributeContainer() const
return m_attributeContainer; return m_attributeContainer;
} }
IPublishingItem *PublishingItem::clone() const
{
return new PublishingItem(*this);
}
void PublishingItem::processNodeAttributes(const QDomElement &element) void PublishingItem::processNodeAttributes(const QDomElement &element)
{ {
QDomNamedNodeMap namedNodeMap = element.attributes(); QDomNamedNodeMap namedNodeMap = element.attributes();

View File

@@ -44,8 +44,6 @@ class GeneralAttributeContainer;
class PublishingItem : public IPublishingItem class PublishingItem : public IPublishingItem
{ {
public: public:
typedef QSharedPointer<PublishingItem> Ptr;
PublishingItem(); PublishingItem();
PublishingItem(const PublishingItem &item); PublishingItem(const PublishingItem &item);
PublishingItem& operator=(const PublishingItem &item); PublishingItem& operator=(const PublishingItem &item);
@@ -56,6 +54,7 @@ public:
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const; QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
IAttributeContainer* attributeContainer() const; IAttributeContainer* attributeContainer() const;
IPublishingItem* clone() const;
private: private:
void processNodeAttributes(const QDomElement &element); void processNodeAttributes(const QDomElement &element);

View File

@@ -42,6 +42,7 @@
#include "../widgets/projectsettingswidget.h" #include "../widgets/projectsettingswidget.h"
#include "../widgets/configurationswidgets.h" #include "../widgets/configurationswidgets.h"
#include "configurationcontainer.h" #include "configurationcontainer.h"
#include "../interfaces/iattributecontainer.h"
namespace VcProjectManager { namespace VcProjectManager {
namespace Internal { namespace Internal {
@@ -747,7 +748,7 @@ QDomElement VcProjectDocument2008::toVcDocumentElement(QDomDocument &domXMLDocum
if (!m_targetFrameworkVersion.isEmpty()) if (!m_targetFrameworkVersion.isEmpty())
vcDocNode.setAttribute(QLatin1String("TargetFrameworkVersion"), m_targetFrameworkVersion); vcDocNode.setAttribute(QLatin1String("TargetFrameworkVersion"), m_targetFrameworkVersion);
if (!m_publishingData->isEmpty()) if (m_publishingData->publishingItemCount() && m_publishingData->attributeContainer()->getAttributeCount())
vcDocNode.appendChild(m_publishingData->toXMLDomNode(domXMLDocument)); vcDocNode.appendChild(m_publishingData->toXMLDomNode(domXMLDocument));
return vcDocNode; return vcDocNode;