00001
00002
00003
00004
00005
00006
00007 #include "DocumentSerialize.h"
00008 #include "EngaugeAssert.h"
00009 #include "Logger.h"
00010 #include "PointIdentifiers.h"
00011 #include <QObject>
00012 #include <QXmlStreamReader>
00013 #include <QXmlStreamWriter>
00014 #include "Xml.h"
00015
00016 PointIdentifiers::PointIdentifiers()
00017 {
00018 }
00019
00020 bool PointIdentifiers::contains(const QString &pointIdentifier) const
00021 {
00022 LOG4CPP_DEBUG_S ((*mainCat)) << "PointIdentifiers::contains"
00023 << " pointCount=" << m_pointIdentifiers.count();
00024
00025 return m_pointIdentifiers.contains (pointIdentifier);
00026 }
00027
00028 int PointIdentifiers::count() const
00029 {
00030 return m_pointIdentifiers.count();
00031 }
00032
00033 QString PointIdentifiers::getKey (int i) const
00034 {
00035 ENGAUGE_ASSERT (i < m_pointIdentifiers.count());
00036
00037 QList<QString> keys = m_pointIdentifiers.keys();
00038
00039 return keys.at(i);
00040 }
00041
00042 bool PointIdentifiers::getValue (const QString &pointIdentifier) const
00043 {
00044 ENGAUGE_ASSERT (m_pointIdentifiers.contains (pointIdentifier));
00045
00046 return m_pointIdentifiers [pointIdentifier];
00047 }
00048
00049 void PointIdentifiers::loadXml (QXmlStreamReader &reader)
00050 {
00051 bool success = true;
00052
00053
00054 while (loadNextFromReader (reader)) {
00055
00056 if (reader.atEnd() || reader.hasError ()) {
00057 success = false;
00058 break;
00059 }
00060
00061 if ((reader.tokenType() == QXmlStreamReader::EndElement) &&
00062 (reader.name() == DOCUMENT_SERIALIZE_POINT_IDENTIFIERS)) {
00063 break;
00064 }
00065
00066
00067 if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
00068 (reader.name() == DOCUMENT_SERIALIZE_POINT_IDENTIFIER)) {
00069
00070
00071 QXmlStreamAttributes attributes = reader.attributes();
00072
00073 if (attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_IDENTIFIER_NAME) &&
00074 attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_IDENTIFIER_VALUE)) {
00075
00076 QString valueStr = attributes.value (DOCUMENT_SERIALIZE_POINT_IDENTIFIER_VALUE).toString();
00077
00078 QString identifier = attributes.value (DOCUMENT_SERIALIZE_POINT_IDENTIFIER_NAME).toString();
00079 bool value = (valueStr == DOCUMENT_SERIALIZE_BOOL_TRUE);
00080
00081 m_pointIdentifiers [identifier] = value;
00082 }
00083 }
00084 }
00085
00086 if (!success) {
00087 reader.raiseError (QObject::tr ("Cannot read point identifiers"));
00088 }
00089 }
00090
00091 void PointIdentifiers::saveXml (QXmlStreamWriter &writer) const
00092 {
00093 writer.writeStartElement(DOCUMENT_SERIALIZE_POINT_IDENTIFIERS);
00094 PointIdentifiersInternal::const_iterator itr;
00095 for (itr = m_pointIdentifiers.begin(); itr != m_pointIdentifiers.end (); itr++) {
00096 QString identifier = itr.key();
00097 bool value = itr.value();
00098 writer.writeStartElement (DOCUMENT_SERIALIZE_POINT_IDENTIFIER);
00099 writer.writeAttribute(DOCUMENT_SERIALIZE_POINT_IDENTIFIER_NAME, identifier);
00100 writer.writeAttribute(DOCUMENT_SERIALIZE_POINT_IDENTIFIER_VALUE,
00101 value ? DOCUMENT_SERIALIZE_BOOL_TRUE : DOCUMENT_SERIALIZE_BOOL_FALSE);
00102 writer.writeEndElement();
00103 }
00104 writer.writeEndElement();
00105 }
00106
00107 void PointIdentifiers::setKeyValue (const QString &pointIdentifier,
00108 bool value)
00109 {
00110 m_pointIdentifiers [pointIdentifier] = value;
00111 }