4 #include "MessagingUtils.h"
6 #include "Configuration.h"
7 #include "DateTimeSettings.h"
10 * BaseMessage class functions
12 BaseMessage::BaseMessage()
15 qDebug("BaseMessage::BaseMessage");
17 iMessage = new QDomDocument();
19 qDebug("BaseMessage::BaseMessage end");
23 BaseMessage::~BaseMessage()
26 qDebug("BaseMessage::~BaseMessage");
34 qDebug("BaseMessage::~BaseMessage end");
38 QList<QDomNode> BaseMessage::getNodesByName(const QString& aNodeName, const QString& aParentName, QDomNode* aRootNode)
41 qDebug("BaseMessage::getNodesByName");
44 //TODO: Add implementation for attribute search
47 QList<QDomNode> specList;
50 = (aRootNode ) ? aRootNode->toElement().elementsByTagName(aNodeName) : iMessage->elementsByTagName(aNodeName);
52 for (int i=0; i<list.count(); i++)
54 if (aParentName != QString::null )
56 if( !list.item( i ).parentNode().isNull() && list.item( i ).parentNode().isElement() && list.item( i ).parentNode().toElement().tagName().compare( aParentName ) == 0 )
57 specList.append( list.item( i ) );
60 specList.append( list.item( i ) );
63 qDebug( "BaseMessage::getNodesByName end" );
68 QDomNode BaseMessage::getNodeFromDocument(const QString& aNodeName, QDomNode::NodeType aNodeType, const QString& aParentName, int aIndex, QDomNode* aRootNode)
71 qDebug("BaseMessage::getNodeFromDocument");
74 if (aNodeType == QDomNode::ElementNode)
76 = getElementFromDocument(aNodeName, aParentName, aIndex, aRootNode);
77 else if (aNodeType == QDomNode::AttributeNode)
79 = getAttributeFromDocument(aNodeName, aParentName, aIndex, aRootNode);
81 qDebug("BaseMessage::getNodeFromDocument end");
86 QDomNode BaseMessage::getAttributeFromDocument(const QString& aAttributeName, const QString& aParentName, int aIndex, QDomNode* aRootNode)
89 qDebug("BaseMessage::getAttributeFromDocument");
96 root = ( !aRootNode ) ? iMessage->documentElement() : *aRootNode;
100 qDebug("BaseMessage::getAttributeFromDocument : RootNode is NULL.");
105 if (aParentName != QString::null )
107 if( root.isElement() )
109 QDomNodeList list = root.toElement().elementsByTagName( aParentName );
110 if( list.count()> 0 ) parent = list.item( 0 );
114 QDomNamedNodeMap attrs = parent.attributes();
116 int count = attrs.count();
117 if( count==0 || aIndex >= count || !attrs.contains( aAttributeName ) ) return root;
119 QList<QDomAttr> list;
121 for( int i=0; i<count; i++ )
123 QDomAttr attr = attrs.item( i ).toAttr();
125 if( attr.name().compare( aAttributeName ) == 0 || attr.localName().compare( aAttributeName ) == 0 )
127 if( aParentName != QString::null && ( attr.ownerElement().tagName().compare( aParentName ) == 0 || attr.ownerElement().localName().compare( aParentName ) == 0 ))
137 if( list.count()> 0 )
138 node = list.at( aIndex );
141 qDebug( "BaseMessage::getAttributeFromDocument end." );
147 QDomNode BaseMessage::getElementFromDocument(const QString& aElementName, const QString& aParentName, int aIndex, QDomNode* aRootNode)
150 qDebug("BaseMessage::getElementFromDocument");
157 elems = iMessage->elementsByTagName(aElementName);
161 elems = aRootNode->toElement().elementsByTagName(aElementName);
164 int count = elems.count();
165 if (count == 0 || aIndex >= count)
168 qDebug("BaseMessage::getElementFromDocument : No Elements found.");
170 return node; //no elements found
173 QList<QDomElement> list;
175 for (int i=0; i<count; i++)
177 QDomElement elem = elems.item( i ).toElement();
178 if (elem.tagName().compare(aElementName) == 0 || elem.localName().compare(aElementName) == 0)
180 if (aParentName != QString::null )
182 if( !elem.parentNode().isNull() )
184 if( elem.parentNode().toElement().tagName().compare( aParentName ) == 0 || elem.parentNode().toElement().tagName().compare( aParentName ) == 0 )
194 if( list.count()> 0 )
195 node = list.at( aIndex );
198 qDebug( "BaseMessage::getElementFromDocument end" );
203 bool BaseMessage::matchName(const QDomNode& aNode, const QString& aName)
206 qDebug("BaseMessage::matchName");
208 if (aNode.isElement() )
210 if (aNode.toElement().tagName().toLower().compare(aName.toLower() ) == 0 || aNode.localName().toLower().compare(aName.toLower() ) == 0)
213 qDebug("BaseMessage::matchName end");
218 else if (aNode.isAttr() )
220 if (aNode.toAttr().name().toLower().compare(aName.toLower() ) == 0 || aNode.localName().toLower().compare(aName.toLower() ) == 0)
223 qDebug("BaseMessage::matchName end");
229 qDebug("BaseMessage::matchName : No match.");
234 QByteArray BaseMessage::getMessage()
237 qDebug("BaseMessage::getMessage");
242 msg.append(iMessage->toByteArray() );
245 qDebug("BaseMessage::getMessage end");
251 * RequestMessage class functions
253 RequestMessage::RequestMessage(RequestCommandId aCommandId) :
257 qDebug("RequestMessage::RequestMessage");
259 createEnvelopeBase();
261 if (aCommandId != ReqCmdNoCommand)
263 createMessageStructure(aCommandId);
266 qDebug("RequestMessage::RequestMessage end");
270 RequestMessage::RequestMessage(const QString& /*aFileName*/)
272 //createEnvelopeBase();
273 //TODO: read operation structures from a file
276 int RequestMessage::addNode(const QDomNode& aNode, QDomNode::NodeType aNodeType, const QString& aParentName, int aIndex, QDomNode* aRootNode)
279 qDebug("RequestMessage::addNode");
285 qDebug("RequestMessage::addNode : iMessage is NULL.");
287 return MsgErrSomeError;
290 int err = MsgErrNoError;
292 if (aNodeType == QDomNode::ElementNode && aNode.isElement() )
294 if (aParentName == QString::null )
297 iMessage->appendChild( aNode );
299 aRootNode->appendChild( aNode );
303 QDomNodeList list = ( aRootNode ) ? aRootNode->toElement().elementsByTagName( aParentName ) : iMessage->elementsByTagName( aParentName );
305 if( list.count() == 0 || aIndex >= list.count() ) err = MsgErrSomeError;
308 QDomElement node = list.at( aIndex ).toElement();
309 node.appendChild( aNode );
313 else if( aNodeType == QDomNode::AttributeNode && aNode.isAttr() )
315 if( aParentName != QString::null )
317 QDomNodeList list = ( aRootNode ) ? aRootNode->toElement().elementsByTagName( aParentName ) : iMessage->elementsByTagName( aParentName );
319 if( list.count() == 0 || aIndex >= list.count() ) err = MsgErrSomeError;
322 QDomElement node = list.at( aIndex ).toElement();
323 node.setAttributeNode( aNode.toAttr() );
327 err = MsgErrSomeError; //Attribute must have a parent specified
330 err = MsgErrSomeError;
333 qDebug( "RequestMessage::addNode end : err=%d", err );
338 int RequestMessage::setNodeValue(const QString& aNodeName, const QString& aValue, QDomNode::NodeType aNodeType, const QString& aParentName, int aIndex, QDomNode* aRootNode)
341 qDebug("RequestMessage::setNodeValue");
346 getNodeFromDocument(aNodeName, aNodeType, aParentName, aIndex, aRootNode);
347 if (node.isNull() || !iMessage)
350 qDebug("RequestMessage::setNodeValue : Node is NULL or iMessage is NULL.");
352 return MsgErrSomeError;
355 int err = MsgErrNoError;
357 if (node.isElement() )
359 node.appendChild(iMessage->createTextNode(aValue) );
361 else if (node.isAttr() )
362 node.toAttr().setValue(aValue);
364 err = MsgErrSomeError;
367 qDebug("RequestMessage::setNodeValue end : err=%d", err);
372 int RequestMessage::createEnvelopeBase()
375 qDebug("RequestMessage::createEnvelopeBase");
383 iMessage = new QDomDocument();
385 int size = sizeof(reqCmdArrayEnvelopeBase ) / sizeof(MessageBodyElement);
386 int err = MsgErrNoError;
388 QDomNode base = constructArrayToNode(reqCmdArrayEnvelopeBase, size);
390 if ( !base.isNull() )
393 err = MsgErrSomeError;
396 qDebug("RequestMessage::createEnvelopeBase end : err=%d", err);
401 QString RequestMessage::getContentTypeForHeader(RequestCommandId aCommandId)
404 qDebug("RequestMessage::getContentTypeForHeader");
406 QString contentType(QString::null );
408 RequestCommandId cmd = ( aCommandId == ReqCmdNoCommand ) ? iCurrCmd : aCommandId;
410 if( cmd != ReqCmdNoCommand )
412 QString operation( QString::null );
416 case ReqCmdGetUserAvailability :
417 { operation = "GetUserAvailability";}break;
418 case ReqCmdConvertId :
419 { operation = "ConvertId";}break;
421 { operation = "GetItem";}break;
423 //Currently unused operations
425 /*case ReqCmdAddDelegate : { operation = "AddDelegate"; } break;
426 case ReqCmdCopyFolder : { operation = "CopyFolder"; } break;
427 case ReqCmdCopyItem : { operation = "CopyItem"; } break;
428 case ReqCmdCreateAttachment : { operation = "CreateAttachment"; } break;
429 case ReqCmdCreateFolder : { operation = "CreateFolder"; } break;
430 case ReqCmdCreateItem : { operation = "CreateItem"; } break;
431 case ReqCmdCreateManagedFolder : { operation = "CreateManagedFolder"; } break;
432 case ReqCmdDeleteAttachment : { operation = "DeleteAttachment"; } break;
433 case ReqCmdDeleteFolder : { operation = "DeleteFolder"; } break;
434 case ReqCmdDeleteItem : { operation = "DeleteItem"; } break;
435 case ReqCmdExpandDL : { operation = "ExpandDL"; } break;
436 case ReqCmdFindFolder : { operation = "FindFolder"; } break;
437 case ReqCmdFindItem : { operation = "FindItem"; } break;
438 case ReqCmdGetAttachment : { operation = "GetAttachment"; } break;
439 case ReqCmdGetDelegate : { operation = "GetDelegate"; } break;
440 case ReqCmdGetEvents : { operation = "GetEvents"; } break;
441 case ReqCmdGetFolder : { operation = "GetFolder"; } break;
442 case ReqCmdGetUserOofSettings : { operation = "GetUserOofSettings"; } break;
443 case ReqCmdMoveFolder : { operation = "MoveFolder"; } break;
444 case ReqCmdMoveItem : { operation = "MoveItem"; } break;
445 case ReqCmdRemoveDelegate : { operation = "RemoveDelegate"; } break;
446 case ReqCmdResolveNames : { operation = "ResolveNames"; } break;
447 case ReqCmdSendItem : { operation = "SendItem"; } break;
448 case ReqCmdSetUserOofSettings : { operation = "SetUserOofSettings"; } break;
449 case ReqCmdSubscribe : { operation = "Subscribe"; } break;
450 case ReqCmdSyncFolderHierarchy : { operation = "SyncFolderHierarchy"; } break;
451 case ReqCmdSyncFolderItems : { operation = "SyncFolderItems"; } break;
452 case ReqCmdUnsubscribe : { operation = "Unsubscribe"; } break;
453 case ReqCmdUpdateDelegate : { operation = "UpdateDelegate"; } break;
454 case ReqCmdUpdateFolder : { operation = "UpdateFolder"; } break;
455 case ReqCmdUpdateItem : { operation = "UpdateItem"; } break;*/
459 if( operation != QString::null )
461 QString content( "text/xml; " );
462 QString charset( "utf-8; " );
463 contentType = QString( content + "charset=" + charset + "action=\"" + ACTION_URL + operation + "\"" );
467 qDebug( "RequestMessage::getContentTypeForHeader end : contentType=%s", contentType.toStdString().data() );
472 int RequestMessage::createMessageStructure()
474 return createMessageStructure(iCurrCmd);
477 int RequestMessage::createMessageStructure(RequestCommandId aCommandId)
480 qDebug("RequestMessage::createMessageStructure");
485 qDebug("RequestMessage::createMessageStructure : iMessage is NULL");
487 return MsgErrSomeError;
490 //Should always be soap:Envelope or first element in envelopebase array
491 QDomNode last = iMessage->documentElement();
493 if ( !matchName(last, reqCmdArrayEnvelopeBase[0].iElementName) )
496 qDebug("RequestMessage::createMessageStructure : Document element is not valid SOAP envelope");
498 return MsgErrSomeError;
502 int err = MsgErrNoError;
506 case ReqCmdGetUserAvailability:
509 = constructArrayToNode(reqCmdArrayGetUserAvailability, sizeof(reqCmdArrayGetUserAvailability )
510 / sizeof(MessageBodyElement));
513 case ReqCmdConvertId:
516 = constructArrayToNode(reqCmdArrayConvertId, sizeof(reqCmdArrayConvertId )
517 / sizeof(MessageBodyElement));
523 = constructArrayToNode(reqCmdArrayGetCalendarItem, sizeof(reqCmdArrayGetCalendarItem )
524 / sizeof(MessageBodyElement));
532 err = MsgErrSomeError;
536 = addNode(cmd, QDomNode::ElementNode, reqCmdArrayEnvelopeBase[0].iElementName);
539 qDebug("RequestMessage::createMessageStructure end : err=%d", err);
544 QDomNode RequestMessage::constructArrayToNode(const MessageBodyElement* aArray, int aSize)
547 qDebug("RequestMessage::constructArrayToNode");
549 QDomElement target; //final node to be returned
551 if ( !iMessage || aSize == 0)
554 qDebug("RequestMessage::constructArrayToNode : iMessage is NULL or aSize is 0.");
559 QDomElement last; // last appended node
561 int currentLvl = 0; //current traversal level
565 MessageBodyElement root = aArray[idx];
566 if (root.iNodeType != QDomNode::ElementNode || root.iTraversalLevel > 0)
569 qDebug("RequestMessage::constructArrayToNode : Malformed message definition. Check array for faults.");
571 return target; //Root must be an element and on level 0
575 if (root.iNamespace != QString::null )
577 //QString prefix = root.iNamespace
578 target = iMessage->createElementNS( root.iNamespace, root.iElementName );
582 target = iMessage->createElement( root.iElementName );
588 for( int i=idx; i<aSize; i++ )
590 MessageBodyElement element = aArray[i];
592 if( element.iNodeType == QDomNode::ElementNode )
594 //Node is an element node
596 if( element.iNamespace != QString::null )
598 elem = iMessage->createElementNS( element.iNamespace, element.iElementName );
602 elem = iMessage->createElement( element.iElementName );
604 if( element.iTraversalLevel == currentLvl )
606 if( currentLvl == 0 )
609 qDebug( "RequestMessage::constructArrayToNode : Malformed message definition. Check array for faults." );
611 return target; //Only root can be at traversal level 0
615 //Sibling to previous
616 if( !last.parentNode().isNull() )
617 last.parentNode().appendChild( elem );
621 qDebug( "RequestMessage::constructArrayToNode : Malformed message definition. Check array for faults." );
623 return target; //malformed. if last has no parent, it's a rootnode
627 else if( element.iTraversalLevel> currentLvl )
629 //check if node is child to previous
630 //else there is something wrong in array representing the structure
631 if( element.iTraversalLevel == currentLvl+1 )
633 last.appendChild( elem );
638 qDebug( "RequestMessage::constructArrayToNode : Malformed message definition. Check array for faults." );
643 else if( element.iTraversalLevel < currentLvl )
646 //Node is on more shallow level than previous
647 //let's get it's parent
648 int diff = currentLvl - element.iTraversalLevel;
650 for( int j=0; j<diff; j++ )
652 QDomNode temp = last.parentNode();
653 last = temp.toElement();
655 last.parentNode().appendChild( elem );
660 qDebug( "RequestMessage::constructArrayToNode : Malformed message definition. Check array for faults." );
662 //some undefined error
668 else if( element.iNodeType == QDomNode::AttributeNode )
670 //Node is an attribute node
673 if( element.iNamespace != QString::null )
674 attr = iMessage->createAttributeNS( element.iNamespace, element.iElementName );
676 attr = iMessage->createAttribute( element.iElementName );
678 if( element.iTraversalLevel == currentLvl )
680 last.setAttributeNode( attr );
685 qDebug( "RequestMessage::constructArrayToNode : Malformed message definition. Check array for faults." );
687 //error in template array.
688 //attributes for element must be specified right after element
689 //and must have same traversalId
696 qDebug( "RequestMessage::constructArrayToNode : Node type not supported." );
698 //node type not supported
702 currentLvl = element.iTraversalLevel;
705 qDebug( "RequestMessage::constructArrayToNode : end" );
711 * ResponseMessage class functions
713 ResponseMessage::ResponseMessage()
716 qDebug("ResponseMessage::ResponseMessage");
718 iMessage = new QDomDocument();
720 qDebug("ResponseMessage::ResponseMessage end");
724 ResponseMessage::ResponseMessage(const QByteArray& aData)
727 qDebug("ResponseMessage::ResponseMessage");
729 iMessage->setContent(aData, true);
731 qDebug("ResponseMessage::ResponseMessage end");
735 QString ResponseMessage::getNodeValue(const QString& aNodeName, QDomNode::NodeType aNodeType, const QString& aParentName, int aIndex, QDomNode* aRootNode)
738 qDebug("ResponseMessage::getNodeValue");
740 QString value = QString::null;
741 QDomNode node = getNodeFromDocument( aNodeName, aNodeType, aParentName, aIndex, aRootNode );
744 if( node.isElement() )
745 value = node.toElement().text();
746 else if( node.isAttr() )
747 value = node.toAttr().value();
750 qDebug( "ResponseMessage::getNodeValue end" );
755 bool ResponseMessage::hasErrors()
758 qDebug("ResponseMessage::hasErrors");
763 qDebug("ResponseMessage::hasErrors : iMessage is NULL.");
768 QDomElement root = iMessage->documentElement();
771 QString rootname = (root.prefix() == QString::null ) ? root.tagName() : root.localName();
772 err = ( rootname.compare( QString( "Envelope" ) ) == 0 ) ? false : true;
774 QDomNodeList list = iMessage->elementsByTagName( QString( "m:ResponseCode" ) );
775 for( int i=0; i<list.count(); i++ )
777 if( list.item(i).nodeValue().compare( "NoError" ) != 0 )
783 qDebug( "ResponseMessage::hasErrors end : err=%d", err );
789 * ReqMsgGetUserAvailability class functions
792 ReqMsgGetUserAvailability::ReqMsgGetUserAvailability() :
793 RequestMessage(ReqCmdGetUserAvailability)
796 qDebug("ReqMsgGetUserAvailability::ReqMsgGetUserAvailability");
798 if (iMessage && iCurrCmd == ReqCmdGetUserAvailability)
800 setNodeValue(QString("MergedFreeBusyIntervalInMinutes"), QString::number( 60) );
801 setNodeValue(QString("RequestedView"), QString("DetailedMerged") );
804 qDebug("ReqMsgGetUserAvailability::ReqMsgGetUserAvailability end");
808 int ReqMsgGetUserAvailability::addUser(const QString& aAddress, const QString& /*aAttendeeType*/, const QString& aExcludeConflicts)
811 qDebug("ReqMsgGetUserAvailability::addUser");
813 if ( !iMessage || iCurrCmd != ReqCmdGetUserAvailability)
816 qDebug("ReqMsgGetUserAvailability::addUser : iMessage is NULL or current command id is wrong");
818 return MsgErrSomeError;
821 int err = MsgErrNoError;
822 int size = sizeof(reqCmdMailboxElement ) / sizeof(MessageBodyElement);
824 //Create mailbox data element
825 QDomNode mailbox = constructArrayToNode(reqCmdMailboxElement, size);
826 if ( !mailbox.isNull() )
830 if (mailbox.hasChildNodes() )
832 for (QDomNode subnode = mailbox.firstChild(); !subnode.isNull(); subnode
833 = subnode.nextSibling() )
835 qDebug("subnode: %s", subnode.toElement().tagName().toStdString().data() );
836 if (matchName(subnode, QString("Email") ) )
843 setNodeValue(QString("Address"), aAddress, QDomNode::ElementNode, QString("Email"), 0, &email);
844 setNodeValue(QString("AttendeeType"), QString("Required"), QDomNode::ElementNode, QString("MailboxData"), 0, &mailbox);
845 setNodeValue(QString("ExcludeConflicts"), aExcludeConflicts, QDomNode::ElementNode, QString("MailboxData"), 0, &mailbox);
848 = addNode(mailbox, QDomNode::ElementNode, QString("MailboxDataArray") );
851 err = MsgErrSomeError;
854 qDebug("ReqMsgGetUserAvailability::addUser end : err=%d", err);
859 int ReqMsgGetUserAvailability::setTimeWindow(const QDateTime& aStart, const QDateTime& aEnd)
862 qDebug("ReqMsgGetUserAvailability::setTimeWindow");
864 if ( !iMessage || iCurrCmd != ReqCmdGetUserAvailability)
867 qDebug("ReqMsgGetUserAvailability::setTimeWindow : iMessage is NULL or command id is wrong");
869 return MsgErrSomeError;
872 int err = MsgErrNoError;
874 err = setNodeValue(QString("StartTime"), aStart.toString(Qt::ISODate) );
875 err = setNodeValue(QString("EndTime"), aEnd.toString(Qt::ISODate) );
878 qDebug("ReqMsgGetUserAvailability::setTimeWindow end : err=%d", err);
883 int ReqMsgGetUserAvailability::setTimeZone()
886 qDebug("ReqMsgGetUserAvailability::setTimeZone");
888 if ( !iMessage || iCurrCmd != ReqCmdGetUserAvailability)
891 qDebug("ReqMsgGetUserAvailability::setTimeZone : iMessage is NULL or command id is wrong");
893 return MsgErrSomeError;
895 int err = MsgErrNoError;
901 localTime = localtime(&rawtime);
903 int offsetMinutes = localTime->tm_gmtoff / 60;
904 if (localTime->tm_isdst)
905 offsetMinutes -= 60; // If DST is in use then reduce an hour from offset, because
906 // DST will be added to the offset later and it already includes
907 // DST. TODO: This is silly and must be changed if possible.
908 // If you can get UTC offset without DST, use it here.
911 qDebug("ReqMsgGetUserAvailability::setTimeZone - offset in minutes=%d", offsetMinutes);
914 DateTimeSettings *dateTimeSettings = Configuration::instance()->dateTimeSettings();
916 setNodeValue( QString( "Bias" ), QString::number( -offsetMinutes ), QDomNode::ElementNode, QString( "TimeZone" ) );
917 setNodeValue( QString( "Bias" ), QString::number( 0 ), QDomNode::ElementNode, QString( "StandardTime" ) );
918 setNodeValue( QString( "Time" ), dateTimeSettings->STDTime(), QDomNode::ElementNode, QString( "StandardTime" ) );
919 setNodeValue( QString( "DayOrder" ), dateTimeSettings->STDDay(), QDomNode::ElementNode, QString( "StandardTime" ) );
920 setNodeValue( QString( "Month" ), dateTimeSettings->STDMonth(), QDomNode::ElementNode, QString( "StandardTime" ) );
921 setNodeValue( QString( "DayOfWeek" ), dateTimeSettings->switchDay(), QDomNode::ElementNode, QString( "StandardTime" ) );
922 setNodeValue( QString( "Bias" ), QString::number( -60 ), QDomNode::ElementNode, QString( "DaylightTime" ) );
923 setNodeValue( QString( "Time" ), dateTimeSettings->DSTTime(), QDomNode::ElementNode, QString( "DaylightTime" ) );
924 setNodeValue( QString( "DayOrder" ), dateTimeSettings->DSTDay(), QDomNode::ElementNode, QString( "DaylightTime" ) );
925 setNodeValue( QString( "Month" ), dateTimeSettings->DSTMonth(), QDomNode::ElementNode, QString( "DaylightTime" ) );
926 setNodeValue( QString( "DayOfWeek" ), dateTimeSettings->switchDay(), QDomNode::ElementNode, QString( "DaylightTime" ) );
929 qDebug("ReqMsgGetUserAvailability::setTimeZone end : err=%d", err);
935 * ReqMsgConvertMeetingId class functions
937 ReqMsgConvertMeetingId::ReqMsgConvertMeetingId(const QString& aItemId, const QString& aMailbox)
940 qDebug("ReqMsgConvertMeetingId::ReqMsgConvertMeetingId");
942 //For this class, we're not going to provide id for base class as parameter,
943 //because before content structure initialization, we must add SOAP header to envelope
944 iCurrCmd = ReqCmdConvertId;
948 constructArrayToNode(reqCmdArrayConvertIdHeader, sizeof(reqCmdArrayConvertIdHeader )
949 / sizeof(MessageBodyElement));
951 if ( !header.isNull() )
955 addNode(header, QDomNode::ElementNode, reqCmdArrayEnvelopeBase[0].iElementName);
957 if (err == MsgErrNoError)
959 createMessageStructure(ReqCmdConvertId);
961 if (aItemId != QString::null ) setItemId( aItemId );
962 if( aMailbox != QString::null ) setMailbox( aMailbox );
964 setNodeValue( QString( "Version" ), QString( "Exchange2007_SP1" ), QDomNode::AttributeNode, QString( "RequestServerVersion" ) );
965 setNodeValue( QString( "DestinationFormat" ), QString( "EwsLegacyId" ), QDomNode::AttributeNode, QString( "ConvertId" ) );
966 setNodeValue( QString( "Format" ), QString( "HexEntryId" ), QDomNode::AttributeNode, QString( "AlternateId" ) );
969 //setNodeValue( QString( "xmlns:t" ), NS_T, QDomNode::AttributeNode, QString( "ConvertId" ) );
971 //Must be added (for now at least) like this, because Envelope is initialized already, without attributes
972 /*QDomAttr attr = iMessage->createAttribute( QString( "xmlns:t" ) );
973 attr.setValue( NS_T );
974 addNode( attr, QDomNode::AttributeNode, QString( "Envelope" ) );
977 qDebug( "ReqMsgConvertMeetingId::ReqMsgConvertMeetingId end" );
981 int ReqMsgConvertMeetingId::setItemId(const QString& aItemId)
984 qDebug("ReqMsgConvertMeetingId::setItemId");
988 setNodeValue(QString("Id"), aItemId, QDomNode::AttributeNode, QString("AlternateId") );
990 qDebug("ReqMsgConvertMeetingId::setItemId end : err=%d", err);
995 int ReqMsgConvertMeetingId::setMailbox(const QString& aMailbox)
998 qDebug("ReqMsgConvertMeetingId::setMailbox");
1002 setNodeValue(QString("Mailbox"), aMailbox, QDomNode::AttributeNode, QString("AlternateId") );
1004 qDebug("ReqMsgConvertMeetingId::setMailbox end : err=%d", err);
1010 * ReqMsgGetCalendarItem class functions
1012 ReqMsgGetCalendarItem::ReqMsgGetCalendarItem(const QString& aItemId) :
1013 RequestMessage(ReqCmdGetItem)
1016 qDebug("ReqMsgGetCalendarItem::ReqMsgGetCalendarItem");
1018 if (iMessage && iCurrCmd == ReqCmdGetItem)
1020 setNodeValue(QString("BaseShape"), QString("AllProperties") );
1022 if (aItemId != QString::null )
1023 setItemId( aItemId );
1026 qDebug( "ReqMsgGetCalendarItem::ReqMsgGetCalendarItem end" );
1030 int ReqMsgGetCalendarItem::setItemId(const QString& aItemId)
1033 qDebug("ReqMsgGetCalendarItem::setItemId");
1037 setNodeValue(QString("Id"), aItemId, QDomNode::AttributeNode, QString("ItemId"), 0);
1039 qDebug("ReqMsgGetCalendarItem::setItemId end : err=%d", err);
1045 * ResMsgGetUserAvailability class functions
1047 ResMsgGetUserAvailability::ResMsgGetUserAvailability(const QByteArray& aData) :
1048 ResponseMessage(aData)
1051 qDebug("ResMsgGetUserAvailability::ResMsgGetUserAvailability");
1052 qDebug("ResMsgGetUserAvailability::ResMsgGetUserAvailability end");
1056 int ResMsgGetUserAvailability::getMeetingsFromResponse(QList<Meeting*>& aMeetings, const Room &aRoom)
1059 qDebug("ResMsgGetUserAvailability::getMeetingsFromResponse");
1064 qDebug("ResMsgGetUserAvailability::getMeetingsFromResponse : iMessage is NULL");
1066 return MsgErrSomeError;
1069 //TODO: Clean this function a bit (see getMeetingDetailsFromResponse)
1071 int err = MsgErrNoError;
1073 QDomNodeList list = iMessage->elementsByTagName(QString("CalendarEvent") );
1075 for (int i=0; i<list.count(); i++)
1077 QDomElement e = list.item( i ).toElement();
1078 QString tagName = (e.prefix() == QString::null ) ? e.tagName().toLower() : e.localName().toLower();
1080 if( !e.isNull() && tagName == "calendarevent" )
1083 QString id, startsAt, endsAt, organizer, subject;
1085 for ( QDomNode subnode = e.firstChild(); !subnode.isNull(); subnode = subnode.nextSibling() )
1087 QDomElement e = subnode.toElement();
1088 QString tagName = ( e.prefix() == QString::null ) ? e.tagName().toLower() : e.localName().toLower();
1090 if( tagName == QString( "starttime" ) )
1092 startsAt = e.text();
1094 else if( tagName == QString( "endtime" ) )
1098 else if( tagName == QString( "calendareventdetails" ) )
1101 for ( QDomNode detailnode = subnode.firstChild(); !detailnode.isNull(); detailnode = detailnode.nextSibling() )
1104 QDomElement e = detailnode.toElement();
1105 QString tagName = ( e.prefix() == QString::null ) ? e.tagName().toLower() : e.localName().toLower();
1107 if( tagName == QString( "id" ) )
1112 if( tagName == QString( "subject" ) )
1120 QDateTime start = QDateTime::fromString( startsAt, Qt::ISODate );
1121 QDateTime end = QDateTime::fromString( endsAt, Qt::ISODate );
1123 aMeetings.append( new Meeting(
1133 qDebug( "ResMsgGetUserAvailability::getMeetingsFromResponse end : err=%d", err );
1139 * ResMsgGetCalendarItem class functions
1141 int ResMsgGetCalendarItem::getMeetingDetailsFromResponse(Meeting& aMeeting)
1144 qDebug("ResMsgGetCalendarItem::getMeetingDetailsFromResponse");
1146 if ( !iMessage || hasErrors() )
1149 qDebug("ResMsgGetCalendarItem::getMeetingDetailsFromResponse : iMessage is NULL or response has errors.");
1151 return MsgErrSomeError;
1154 QString name, address, description; //Organizer
1157 getElementFromDocument(QString("Mailbox"), QString("Organizer"), 0);
1159 if ( !box.isNull() && box.hasChildNodes() )
1161 for (QDomNode subnode = box.firstChild(); !subnode.isNull(); subnode
1162 = subnode.nextSibling() )
1164 if (matchName(subnode, QString("Name") ) )
1165 name = subnode.toElement().text();
1166 else if (matchName(subnode, QString("EmailAddress") ) )
1167 address = subnode.toElement().text();
1172 getElementFromDocument(QString("Body"), QString("CalendarItem"), 0);
1174 if (body.isElement() )
1175 description = body.toElement().text();
1177 aMeeting.setOrganizer(name, address);
1178 aMeeting.setDescription(description);
1181 qDebug("ResMsgGetCalendarItem::getMeetingDetailsFromResponse end");
1183 return MsgErrNoError;