701 // Initial settings |
701 // Initial settings |
702 if ( name == KInitialSettingsElement ) |
702 if ( name == KInitialSettingsElement ) |
703 { |
703 { |
704 // Check parent element |
704 // Check parent element |
705 parentNode = node->Parent(); |
705 parentNode = node->Parent(); |
706 const TDesC8& parentName = parentNode->Name(); |
706 const TDesC8& parentName = parentNode->Name(); |
707 |
|
708 if( parentName == KPluginElement ) |
707 if( parentName == KPluginElement ) |
709 { |
708 { |
710 ChspsDomList& initial_settings_childList = node->ChildNodes(); |
709 ChspsDomList& initial_settings_childList = node->ChildNodes(); |
711 |
710 ChspsDomNode* initialSettingsNode = |
712 ChspsDomNode* initialSettingsNode = static_cast<ChspsDomNode*>(initial_settings_childList.FindByName( KSettingsElement )); |
711 static_cast<ChspsDomNode*>(initial_settings_childList.FindByName( KSettingsElement )); |
713 |
712 if( initialSettingsNode ) |
714 ChspsDomList& initial_items = initialSettingsNode->ChildNodes(); |
|
715 |
|
716 ChspsDomNode* controlNode = hspsServerUtil::FindNodeByTagL(KControlElement, *parentNode ); |
|
717 |
|
718 if( controlNode ) |
|
719 { |
713 { |
720 ChspsDomList& controlNode_childList = controlNode->ChildNodes(); |
714 |
721 |
715 ChspsDomList& initial_items = initialSettingsNode->ChildNodes(); |
722 ChspsDomNode* settingsNode = static_cast<ChspsDomNode*>(controlNode_childList.FindByName( KSettingsElement )); |
716 ChspsDomNode* controlNode = hspsServerUtil::FindNodeByTagL(KControlElement, *parentNode ); |
723 |
717 |
724 if( settingsNode ) |
718 if( controlNode ) |
725 { |
719 { |
726 ChspsDomList& items = settingsNode->ChildNodes(); |
720 ChspsDomList& controlNode_childList = controlNode->ChildNodes(); |
727 |
721 |
728 if( items.Length() == initial_items.Length() ) |
722 ChspsDomNode* settingsNode = static_cast<ChspsDomNode*>(controlNode_childList.FindByName( KSettingsElement )); |
|
723 |
|
724 if( settingsNode ) |
729 { |
725 { |
730 TInt index = controlNode->ItemIndex( *settingsNode ); |
726 ChspsDomList& items = settingsNode->ChildNodes(); |
731 controlNode->DeleteChild(settingsNode); |
727 |
732 ChspsDomNode* clone = initialSettingsNode->CloneL( aAppODT.DomDocument().StringPool() ); |
728 if( items.Length() == initial_items.Length() ) |
733 CleanupStack::PushL( clone ); |
729 { |
734 controlNode->AddChildL( clone, index ); |
730 TInt index = controlNode->ItemIndex( *settingsNode ); |
735 clone->SetParent( controlNode ); |
731 controlNode->DeleteChild(settingsNode); |
736 CleanupStack::Pop( clone ); |
732 ChspsDomNode* clone = initialSettingsNode->CloneL( aAppODT.DomDocument().StringPool() ); |
737 } |
733 CleanupStack::PushL( clone ); |
738 else if( items.Length() > initial_items.Length() ) |
734 controlNode->AddChildL( clone, index ); |
739 { |
735 clone->SetParent( controlNode ); |
740 error = ParseInitialSettingsItemsL(*initialSettingsNode,*settingsNode); |
736 CleanupStack::Pop( clone ); |
|
737 } |
|
738 else if( items.Length() > initial_items.Length() ) |
|
739 { |
|
740 error = ParseInitialSettingsItemsL(*initialSettingsNode,*settingsNode); |
|
741 } |
|
742 else |
|
743 { |
|
744 error = KErrCorrupt; |
|
745 } |
741 } |
746 } |
742 else |
747 else |
743 { |
748 { |
744 error = KErrCorrupt; |
749 error = KErrNotFound; |
745 } |
750 } |
746 } |
751 } |
747 else |
752 else |
748 { |
753 { |
749 error = KErrNotFound; |
754 error = KErrCorrupt; |
750 } |
755 } |
751 } |
756 |
|
757 // clean settings under initialsettings |
|
758 node->ChildNodes().RemoveItem( initialSettingsNode ); |
|
759 delete initialSettingsNode; |
|
760 initialSettingsNode = NULL; |
|
761 |
|
762 } |
752 else |
763 else |
753 { |
764 { |
|
765 // initialSettingsNode (KSettingsElement) not found |
754 error = KErrCorrupt; |
766 error = KErrCorrupt; |
755 } |
767 } |
756 // clean settings under initialsettings |
768 |
757 node->ChildNodes().RemoveItem( initialSettingsNode ); |
769 } |
758 delete initialSettingsNode; |
|
759 initialSettingsNode = NULL; |
|
760 } |
|
761 } |
770 } |
762 |
771 |
763 prevNode = node; |
772 prevNode = node; |
764 node = iter->NextL(); |
773 node = iter->NextL(); |
765 } |
774 } |
953 { |
962 { |
954 ChspsDomList& attrList = node->AttributeList(); |
963 ChspsDomList& attrList = node->AttributeList(); |
955 |
964 |
956 ChspsDomAttribute* attr = static_cast<ChspsDomAttribute*>( |
965 ChspsDomAttribute* attr = static_cast<ChspsDomAttribute*>( |
957 attrList.FindByName( KItemAttrId )); |
966 attrList.FindByName( KItemAttrId )); |
958 const TDesC8& value = attr->Value(); |
967 if( attr ) |
959 if( value.Compare( aNodeIdentifier ) == 0 ) |
968 { |
960 { |
969 const TDesC8& value = attr->Value(); |
961 found = ETrue; |
970 if( value.CompareF( aNodeIdentifier ) == 0 ) |
962 targetNode = node; |
971 { |
|
972 found = ETrue; |
|
973 targetNode = node; |
|
974 } |
963 } |
975 } |
964 } |
976 } |
965 node = iter->NextL(); |
977 node = iter->NextL(); |
966 } |
978 } |
967 CleanupStack::PopAndDestroy( iter ); |
979 CleanupStack::PopAndDestroy( iter ); |