36 typedef std::vector<std::string>::iterator StringIterator; |
35 typedef std::vector<std::string>::iterator StringIterator; |
37 typedef std::vector<std::string>::const_iterator ConstStringIterator; |
36 typedef std::vector<std::string>::const_iterator ConstStringIterator; |
38 typedef std::vector<std::wstring>::const_iterator ConstWstringIterator; |
37 typedef std::vector<std::wstring>::const_iterator ConstWstringIterator; |
39 typedef std::vector<XmlDetails::TScrEnvironmentDetails>::const_iterator ScrEnvIterator; |
38 typedef std::vector<XmlDetails::TScrEnvironmentDetails>::const_iterator ScrEnvIterator; |
40 typedef std::vector<XmlDetails::TScrEnvironmentDetails::TLocalizedSoftwareTypeName>::const_iterator ScrEnvLocSwTypeNameIterator; |
39 typedef std::vector<XmlDetails::TScrEnvironmentDetails::TLocalizedSoftwareTypeName>::const_iterator ScrEnvLocSwTypeNameIterator; |
41 typedef std::vector<XmlDetails::TScrEnvironmentDetails::TCustomAcessList>::const_iterator ScrEnvCustomAccessIterator; |
|
42 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponent>::const_iterator CompIterator; |
40 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponent>::const_iterator CompIterator; |
43 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentLocalizable>::const_iterator CompLocIterator; |
41 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentLocalizable>::const_iterator CompLocIterator; |
44 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentProperty>::const_iterator CompPropIterator; |
42 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentProperty>::const_iterator CompPropIterator; |
45 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentFile>::const_iterator CompFileIter; |
43 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentFile>::const_iterator CompFileIter; |
46 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentFile::TFileProperty>::const_iterator FilePropIterator; |
44 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentFile::TFileProperty>::const_iterator FilePropIterator; |
47 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo>::const_iterator CompApplicationRegistrationInfoIterator; |
|
48 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute>::const_iterator ApplicationAttributeIterator; |
|
49 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TDataType>::const_iterator ApplicationDataTypeIterator; |
|
50 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo>::const_iterator ApplicationServiceInfoIterator; |
|
51 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo>::const_iterator ApplicationLocalizableInfoIterator; |
|
52 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute>::const_iterator LocalizableAttributeIterator; |
|
53 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData>::const_iterator ViewDataIterator; |
|
54 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes>::const_iterator ViewDataAttributeIterator; |
|
55 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty>::const_iterator ApplicationPropertyIterator; |
|
56 |
|
57 |
|
58 #ifdef __LINUX__ |
|
59 |
|
60 /* |
|
61 * Platform specific feature |
|
62 * |
|
63 * In WINDOWS : sizeof(wchar_t) = 2 |
|
64 * In LINUX : sizeof(wchar_t) = 4 |
|
65 */ |
|
66 |
|
67 static utf16WString utf32WString2utf16WString(std::wstring aParameter) |
|
68 { |
|
69 int strLen = aParameter.length(); |
|
70 const wchar_t * source = aParameter.c_str(); |
|
71 unsigned short int* buffer = new unsigned short int[strLen + 1]; |
|
72 |
|
73 // Using a temp variable in place of buffer as ConvertUTF32toUTF16 modifies the source pointer passed. |
|
74 unsigned short int* temp = buffer; |
|
75 |
|
76 ConvertUTF32toUTF16(&source, source + strLen, &temp, temp + strLen, lenientConversion); |
|
77 |
|
78 // Appending NUL to the converted buffer. |
|
79 *temp = 0; |
|
80 |
|
81 utf16WString utf16Ws; |
|
82 utf16Ws.resize(strLen); |
|
83 |
|
84 // The built-in basic_string template class copy operation |
|
85 // truncates when a NUL is encountered when a c_str() is |
|
86 // used to construct the required string. |
|
87 // So, if aParameter is any hashable string having the |
|
88 // syntax : swtypeName + L'\0' + someId then, we will end |
|
89 // up returning only part of the converted UTF-16 string. |
|
90 // Hence, we resort to the explicit copy operation with |
|
91 // two bytes at a time. |
|
92 while( strLen-- ) |
|
93 { |
|
94 utf16Ws[ strLen ] = buffer[ strLen ]; |
|
95 } |
|
96 |
|
97 delete[] buffer; |
|
98 |
|
99 return utf16Ws; |
|
100 } |
|
101 |
|
102 #else |
|
103 |
|
104 // We need not do anything for WINDOWS, since the windows wstring |
|
105 // will already be in UTF-16 encoding. |
|
106 #define utf32WString2utf16WString(aParameter) (aParameter) |
|
107 |
|
108 #endif |
|
109 |
|
110 |
|
111 |
45 |
112 const int KMaxDrives=26; |
46 const int KMaxDrives=26; |
113 |
47 |
114 CDbLayer::CDbLayer(const std::string& aDllPath, const std::string& aSqlDbName) |
48 CDbLayer::CDbLayer(const std::string& aDllPath, const std::string& aSqlDbName) |
115 { |
49 { |
175 aStatement->Reset(); |
108 aStatement->Reset(); |
176 } |
109 } |
177 |
110 |
178 void CDbLayer::PopulateDatabase(const std::vector<XmlDetails::TScrEnvironmentDetails>& aScrEnvDetails) |
111 void CDbLayer::PopulateDatabase(const std::vector<XmlDetails::TScrEnvironmentDetails>& aScrEnvDetails) |
179 { |
112 { |
180 LOGENTER("CDbLayer::PopulateDatabase()"); |
113 std::string insertSoftwareType("INSERT INTO SoftwareTypes(SoftwareTypeId,SifPluginUid,InstallerSecureId,ExecutionLayerSecureId) VALUES(?,?,?,?);"); |
181 std::string insertSoftwareType("INSERT INTO SoftwareTypes(SoftwareTypeId,SifPluginUid,LauncherExecutable) VALUES(?,?,?);"); |
|
182 std::auto_ptr<CStatement> stmtSwType(iScrDbHandler->PrepareStatement(insertSoftwareType)); |
114 std::auto_ptr<CStatement> stmtSwType(iScrDbHandler->PrepareStatement(insertSoftwareType)); |
183 |
|
184 std::string insertSTWithoutLE("INSERT INTO SoftwareTypes(SoftwareTypeId,SifPluginUid) VALUES(?,?);"); |
|
185 std::auto_ptr<CStatement> stmtSwTypeWithoutLE(iScrDbHandler->PrepareStatement(insertSTWithoutLE)); |
|
186 |
|
187 std::string insertCustomAccessList("INSERT INTO CustomAccessList(SoftwareTypeId,SecureId,AccessMode) VALUES(?,?,?);"); |
|
188 std::auto_ptr<CStatement> stmtCustomAccessList(iScrDbHandler->PrepareStatement(insertCustomAccessList)); |
|
189 |
115 |
190 std::string insertSwTypeName("INSERT INTO SoftwareTypeNames(SoftwareTypeId,Locale,Name) VALUES(?,?,?);"); |
116 std::string insertSwTypeName("INSERT INTO SoftwareTypeNames(SoftwareTypeId,Locale,Name) VALUES(?,?,?);"); |
191 std::auto_ptr<CStatement> stmtSwTypeName(iScrDbHandler->PrepareStatement(insertSwTypeName)); |
117 std::auto_ptr<CStatement> stmtSwTypeName(iScrDbHandler->PrepareStatement(insertSwTypeName)); |
192 |
118 |
193 std::string insertMimeType("INSERT INTO MimeTypes(SoftwareTypeId,MimeType) VALUES(?,?);"); |
119 std::string insertMimeType("INSERT INTO MimeTypes(SoftwareTypeId,MimeType) VALUES(?,?);"); |
194 std::auto_ptr<CStatement> stmtMimeType(iScrDbHandler->PrepareStatement(insertMimeType)); |
120 std::auto_ptr<CStatement> stmtMimeType(iScrDbHandler->PrepareStatement(insertMimeType)); |
195 |
121 |
196 for(ScrEnvIterator aScrEnvIterator = aScrEnvDetails.begin(); aScrEnvIterator != aScrEnvDetails.end(); ++aScrEnvIterator) |
122 for(ScrEnvIterator aScrEnvIterator = aScrEnvDetails.begin(); aScrEnvIterator != aScrEnvDetails.end(); ++aScrEnvIterator) |
197 { |
123 { |
198 // To maintain the consistency of CRC value across the platforms(WINDOWS and LINUX), we are |
124 unsigned int swTypeId = Util::Crc32(aScrEnvIterator->iUniqueSoftwareTypeName.c_str(),aScrEnvIterator->iUniqueSoftwareTypeName.length()*2); |
199 // using UTF-16 string in CRC generation. |
|
200 utf16WString utf16Ws = utf32WString2utf16WString(aScrEnvIterator->iUniqueSoftwareTypeName); |
|
201 unsigned int swTypeId = Util::Crc32(utf16Ws.c_str(),aScrEnvIterator->iUniqueSoftwareTypeName.length()*2); |
|
202 |
|
203 if (!aScrEnvIterator->iLauncherExecutable.empty()) |
|
204 { |
|
205 stmtSwType->BindInt(1, swTypeId); |
125 stmtSwType->BindInt(1, swTypeId); |
206 stmtSwType->BindInt(2, aScrEnvIterator->iSifPluginUid); |
126 stmtSwType->BindInt(2, aScrEnvIterator->iSifPluginUid); |
207 stmtSwType->BindStr(3, aScrEnvIterator->iLauncherExecutable); |
127 stmtSwType->BindInt(3, aScrEnvIterator->iInstallerSid); |
|
128 stmtSwType->BindInt(4, aScrEnvIterator->iExecutionLayerSid); |
208 stmtSwType->ExecuteStatement(); |
129 stmtSwType->ExecuteStatement(); |
209 stmtSwType->Reset(); |
130 stmtSwType->Reset(); |
210 } |
|
211 else |
|
212 { |
|
213 stmtSwTypeWithoutLE->BindInt(1, swTypeId); |
|
214 stmtSwTypeWithoutLE->BindInt(2, aScrEnvIterator->iSifPluginUid); |
|
215 stmtSwTypeWithoutLE->ExecuteStatement(); |
|
216 stmtSwTypeWithoutLE->Reset(); |
|
217 } |
|
218 // First insert unique sw type name |
131 // First insert unique sw type name |
219 const TInt uniqueSwTypeNameLocale = 0; |
132 const TInt uniqueSwTypeNameLocale = 0; |
220 ExecuteSwTypeNameStatement(stmtSwTypeName, swTypeId, uniqueSwTypeNameLocale, aScrEnvIterator->iUniqueSoftwareTypeName); |
133 ExecuteSwTypeNameStatement(stmtSwTypeName, swTypeId, uniqueSwTypeNameLocale, aScrEnvIterator->iUniqueSoftwareTypeName); |
221 // Then, insert localized sw type names. |
134 // Then, insert localized sw type names. |
222 for(ScrEnvLocSwTypeNameIterator swTypeNameIter = aScrEnvIterator->iLocalizedSoftwareTypeNames.begin(); swTypeNameIter != aScrEnvIterator->iLocalizedSoftwareTypeNames.end(); ++swTypeNameIter) |
135 for(ScrEnvLocSwTypeNameIterator swTypeNameIter = aScrEnvIterator->iLocalizedSoftwareTypeNames.begin(); swTypeNameIter != aScrEnvIterator->iLocalizedSoftwareTypeNames.end(); ++swTypeNameIter) |
223 { |
136 { |
224 ExecuteSwTypeNameStatement(stmtSwTypeName, swTypeId, swTypeNameIter->iLocale, swTypeNameIter->iName); |
137 ExecuteSwTypeNameStatement(stmtSwTypeName, swTypeId, swTypeNameIter->iLocale, swTypeNameIter->iName); |
225 } |
138 } |
226 |
|
227 for(ScrEnvCustomAccessIterator customAccessIter = aScrEnvIterator->iCustomAcessList.begin(); customAccessIter != aScrEnvIterator->iCustomAcessList.end(); ++customAccessIter) |
|
228 { |
|
229 stmtCustomAccessList->BindInt(1, swTypeId); |
|
230 stmtCustomAccessList->BindInt(2, customAccessIter->iSecureId); |
|
231 stmtCustomAccessList->BindInt(3, customAccessIter->iAccessMode); |
|
232 stmtCustomAccessList->ExecuteStatement(); |
|
233 stmtCustomAccessList->Reset(); |
|
234 } |
|
235 |
|
236 for(ConstWstringIterator mimeIter= aScrEnvIterator->iMIMEDetails.begin(); mimeIter != aScrEnvIterator->iMIMEDetails.end(); ++mimeIter) |
139 for(ConstWstringIterator mimeIter= aScrEnvIterator->iMIMEDetails.begin(); mimeIter != aScrEnvIterator->iMIMEDetails.end(); ++mimeIter) |
237 { |
140 { |
238 stmtMimeType->BindInt(1, swTypeId); |
141 stmtMimeType->BindInt(1, swTypeId); |
239 stmtMimeType->BindStr(2, *mimeIter); |
142 stmtMimeType->BindStr(2, *mimeIter); |
240 stmtMimeType->ExecuteStatement(); |
143 stmtMimeType->ExecuteStatement(); |
241 stmtMimeType->Reset(); |
144 stmtMimeType->Reset(); |
242 } |
145 } |
243 } |
146 } |
244 LOGEXIT("CDbLayer::PopulateDatabase()"); |
|
245 |
147 |
246 } |
148 } |
247 |
149 |
248 void CDbLayer::AddPreProvisionDetails(const XmlDetails::TScrPreProvisionDetail& aPreProvisionDetailList) |
150 void CDbLayer::AddPreProvisionDetails(const XmlDetails::TScrPreProvisionDetail& aPreProvisionDetailList) |
249 { |
151 { |
250 LOGENTER("CDbLayer::AddPreProvisionDetails()"); |
|
251 for(CompIterator aCompIterator = aPreProvisionDetailList.iComponents.begin(); aCompIterator != aPreProvisionDetailList.iComponents.end(); ++aCompIterator) |
152 for(CompIterator aCompIterator = aPreProvisionDetailList.iComponents.begin(); aCompIterator != aPreProvisionDetailList.iComponents.end(); ++aCompIterator) |
252 { |
153 { |
253 std::string beginTransaction("BEGIN;"); |
154 std::string beginTransaction("BEGIN;"); |
254 ExecuteStatement(beginTransaction); |
155 ExecuteStatement(beginTransaction); |
255 |
156 |
256 int componentId = 0; |
157 AddComponentDetails(*aCompIterator, aPreProvisionDetailList.iSoftwareTypeName); |
257 if (!AddComponentDetails(*aCompIterator, aPreProvisionDetailList.iSoftwareTypeName)) |
158 int componentId = iScrDbHandler->LastInsertedId(); |
258 { |
159 AddComponentLocalizables(componentId,aCompIterator->iComponentLocalizables); |
259 componentId = iScrDbHandler->LastInsertedId(); |
160 AddComponentProperties(componentId,aCompIterator->iComponentProperties); |
260 AddComponentLocalizables(componentId,aCompIterator->iComponentLocalizables); |
161 AddComponentFiles(componentId,aCompIterator->iComponentFiles); |
261 AddComponentProperties(componentId,aCompIterator->iComponentProperties); |
162 AddComponentDependencies(componentId, aCompIterator->iComponentDependency, aPreProvisionDetailList.iSoftwareTypeName); |
262 AddComponentFiles(componentId,aCompIterator->iComponentFiles); |
163 |
263 AddComponentDependencies(componentId, aCompIterator->iComponentDependency, aPreProvisionDetailList.iSoftwareTypeName); |
|
264 } |
|
265 AddApplicationRegistrationInfo(componentId,aCompIterator->iApplicationRegistrationInfo); |
|
266 std::string commitTransaction("COMMIT;"); |
164 std::string commitTransaction("COMMIT;"); |
267 ExecuteStatement(commitTransaction); |
165 ExecuteStatement(commitTransaction); |
268 |
166 |
269 } |
167 } |
270 LOGEXIT("CDbLayer::AddPreProvisionDetails()"); |
168 } |
271 } |
169 |
272 |
170 void CDbLayer::AddComponentDetails(const XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, const std::wstring& aSoftwareTypeName) |
273 bool CDbLayer::AddComponentDetails(const XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, const std::wstring& aSoftwareTypeName) |
171 { |
274 { |
|
275 LOGENTER("CDbLayer::AddComponentDetails()"); |
|
276 std::string insertComponents; |
172 std::string insertComponents; |
277 XmlDetails::TScrPreProvisionDetail::TComponentDetails |
173 XmlDetails::TScrPreProvisionDetail::TComponentDetails |
278 componentDetail = aComponent.iComponentDetails; |
174 componentDetail = aComponent.iComponentDetails; |
279 if (aComponent.iComponentDetails.iIsRomApplication) |
175 |
280 { |
176 unsigned int swTypeId = Util::Crc32(aSoftwareTypeName.c_str(),aSoftwareTypeName.length()*2); |
281 LOGINFO("Is rom app"); |
|
282 return true; |
|
283 } |
|
284 LOGINFO("Not rom app"); |
|
285 |
|
286 // To maintain the consistency of CRC value across the platforms(WINDOWS and LINUX), we are |
|
287 // using UTF-16 string in CRC generation. |
|
288 utf16WString utf16Ws = utf32WString2utf16WString(aSoftwareTypeName); |
|
289 unsigned int swTypeId = Util::Crc32(utf16Ws.c_str(),aSoftwareTypeName.length()*2); |
|
290 |
|
291 |
|
292 std::wstring strGlobalId = componentDetail.iGlobalId; |
177 std::wstring strGlobalId = componentDetail.iGlobalId; |
293 |
178 |
294 if(!strGlobalId.empty()) |
179 if(!strGlobalId.empty()) |
295 { |
180 { |
296 insertComponents = "INSERT INTO Components(SoftwareTypeId, SoftwareTypeName, Removable, Size, ScomoState, InstalledDrives, OriginVerified, Hidden, GlobalIdHash, GlobalId, Version, InstallTime) VALUES(?,?,?,?,?,?,?,?,?,?,?,?);"; |
181 insertComponents = "INSERT INTO Components(SoftwareTypeId, SoftwareTypeName, Removable, Size, ScomoState, InstalledDrives, OriginVerified, Hidden, GlobalIdHash, GlobalId, Version, InstallTime) VALUES(?,?,?,?,?,?,?,?,?,?,?,?);"; |
605 int intValue = Util::WideCharToInteger(filePropIter->iValue.c_str()); |
445 int intValue = Util::WideCharToInteger(filePropIter->iValue.c_str()); |
606 stmtFileProperty->BindInt(3, intValue); |
446 stmtFileProperty->BindInt(3, intValue); |
607 } |
447 } |
608 else |
448 else |
609 { |
449 { |
610 std::string str = wstring2string(filePropIter->iValue); |
450 std::string str = Util::wstring2string(filePropIter->iValue); |
611 std::string decodedString = Util::Base64Decode(str); |
451 std::string decodedString = Util::Base64Decode(str); |
612 stmtFileProperty->BindBinary(3, decodedString); |
452 stmtFileProperty->BindBinary(3, str); |
613 stmtFileProperty->BindInt(4, 1); |
453 stmtFileProperty->BindInt(4, 1); |
614 } |
454 } |
615 |
455 |
616 stmtFileProperty->ExecuteStatement(); |
456 stmtFileProperty->ExecuteStatement(); |
617 stmtFileProperty->Reset(); |
457 stmtFileProperty->Reset(); |
618 } |
458 } |
619 } |
459 } |
620 |
460 |
621 |
|
622 void CDbLayer::AddApplicationRegistrationInfo( int aComponentId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo>& aApplicationRegistrationInfo) |
|
623 { |
|
624 LOGENTER("CDbLayer::AddApplicationRegistrationInfo()"); |
|
625 int appflag = 0; |
|
626 int appUid = 0; |
|
627 int error = 0; |
|
628 |
|
629 for(CompApplicationRegistrationInfoIterator compApplicationRegistrationInfoIter = aApplicationRegistrationInfo.begin(); compApplicationRegistrationInfoIter != aApplicationRegistrationInfo.end() ; ++compApplicationRegistrationInfoIter ) |
|
630 { |
|
631 try { |
|
632 appflag = 0; |
|
633 appUid = AddAppAttribute(aComponentId, compApplicationRegistrationInfoIter->iApplicationAttribute); |
|
634 } |
|
635 catch(CException& aException) |
|
636 { |
|
637 LOGERROR(aException.GetMessageA()); |
|
638 LOGERROR("one of AddAppAttribute is already present in database"); |
|
639 appflag = 1; |
|
640 error = 1; |
|
641 } |
|
642 |
|
643 if(appflag) |
|
644 continue; |
|
645 |
|
646 if (appUid != 0) |
|
647 { |
|
648 AddFileOwnershipInfo(appUid, compApplicationRegistrationInfoIter->iFileOwnershipInfo); |
|
649 AddServiceInfo(appUid, compApplicationRegistrationInfoIter->iApplicationServiceInfo); |
|
650 AddAppLocalizableInfo(appUid, compApplicationRegistrationInfoIter->iApplicationLocalizableInfo); |
|
651 AddProperty(appUid, compApplicationRegistrationInfoIter->iApplicationProperty); |
|
652 } |
|
653 else |
|
654 { |
|
655 std::string errMsg = "AppUid is null."; |
|
656 LOGERROR(errMsg); |
|
657 throw CException(errMsg,ExceptionCodes::ESqlArgumentError); |
|
658 } |
|
659 } |
|
660 |
|
661 if(error) |
|
662 { |
|
663 std::string errMsg = "Duplicate entry present in database."; |
|
664 LOGERROR(errMsg); |
|
665 throw CException(errMsg,ExceptionCodes::EFileExists); |
|
666 } |
|
667 |
|
668 LOGEXIT("CDbLayer::AddApplicationRegistrationInfo()"); |
|
669 } |
|
670 |
|
671 int CDbLayer::AddAppAttribute( int aComponentId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute>& aAppAttribute) |
|
672 { |
|
673 LOGENTER("CDbLayer::AddAppAttribute()"); |
|
674 std::string insertAppAttributes; |
|
675 |
|
676 insertAppAttributes = "INSERT INTO AppRegistrationInfo(AppUid,ComponentId,AppFile,TypeId,Attributes,Hidden,Embeddable,Newfile,Launch,GroupName,DefaultScreenNumber) VALUES(?,?,?,?,?,?,?,?,?,?,?);"; |
|
677 std::auto_ptr<CStatement> stmtAppAttribute(iScrDbHandler->PrepareStatement(insertAppAttributes)); |
|
678 |
|
679 stmtAppAttribute->BindInt64(2, aComponentId); |
|
680 |
|
681 //Assigning Default Values |
|
682 TInt64 intVal = 0; |
|
683 stmtAppAttribute->BindInt64(1, intVal); //AppUid |
|
684 stmtAppAttribute->BindInt64(4, intVal); //TypeId |
|
685 stmtAppAttribute->BindInt64(5, intVal); //Attributes |
|
686 stmtAppAttribute->BindInt64(6, intVal); //Hidden |
|
687 stmtAppAttribute->BindInt64(7, intVal); //Embeddable |
|
688 stmtAppAttribute->BindInt64(8, intVal); //Newfile |
|
689 stmtAppAttribute->BindInt64(9, intVal); //Launch |
|
690 stmtAppAttribute->BindInt64(11, intVal); //DefaultScreenNumber |
|
691 std::wstring strVal(L""); |
|
692 stmtAppAttribute->BindStr(3, strVal); //AppFile |
|
693 stmtAppAttribute->BindStr(10, strVal); //GroupName |
|
694 |
|
695 int appUid = 0; |
|
696 std::string appfile; |
|
697 for(ApplicationAttributeIterator applicationAttributeIter = aAppAttribute.begin(); applicationAttributeIter != aAppAttribute.end() ; ++applicationAttributeIter ) |
|
698 { |
|
699 if (applicationAttributeIter->iName == L"AppUid") |
|
700 { |
|
701 LOGINFO("CDbLayer::AddAppAttribute()- appuid"); |
|
702 TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str()); |
|
703 stmtAppAttribute->BindInt64(1, intValue); |
|
704 appUid = intValue; |
|
705 } |
|
706 else if (applicationAttributeIter->iName == L"AppFile") |
|
707 { |
|
708 stmtAppAttribute->BindStr(3, applicationAttributeIter->iValue); |
|
709 if (applicationAttributeIter->iValue.length() == 0) |
|
710 { |
|
711 std::string errMsg = "Invalid app file."; |
|
712 LOGERROR(errMsg); |
|
713 throw CException(errMsg,ExceptionCodes::ESqlArgumentError); |
|
714 } |
|
715 |
|
716 } |
|
717 else if (applicationAttributeIter->iName == L"TypeId") |
|
718 { |
|
719 TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str()); |
|
720 stmtAppAttribute->BindInt64(4, intValue); |
|
721 } |
|
722 else if (applicationAttributeIter->iName == L"Attributes") |
|
723 { |
|
724 TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str()); |
|
725 stmtAppAttribute->BindInt64(5, intValue); |
|
726 } |
|
727 else if (applicationAttributeIter->iName == L"Hidden") |
|
728 { |
|
729 TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str()); |
|
730 stmtAppAttribute->BindInt64(6, intValue); |
|
731 } |
|
732 else if (applicationAttributeIter->iName == L"Embeddable") |
|
733 { |
|
734 TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str()); |
|
735 stmtAppAttribute->BindInt64(7, intValue); |
|
736 } |
|
737 else if (applicationAttributeIter->iName == L"Newfile") |
|
738 { |
|
739 TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str()); |
|
740 stmtAppAttribute->BindInt64(8, intValue); |
|
741 } |
|
742 else if (applicationAttributeIter->iName == L"Launch") |
|
743 { |
|
744 TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str()); |
|
745 stmtAppAttribute->BindInt64(9, intValue); |
|
746 } |
|
747 else if (applicationAttributeIter->iName == L"GroupName") |
|
748 { |
|
749 stmtAppAttribute->BindStr(10, applicationAttributeIter->iValue); |
|
750 } |
|
751 else if (applicationAttributeIter->iName == L"DefaultScreenNumber") |
|
752 { |
|
753 TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str()); |
|
754 stmtAppAttribute->BindInt64(11, intValue); |
|
755 } |
|
756 else |
|
757 { |
|
758 std::string errMsg = "Invalid application attribute."; |
|
759 LOGERROR(errMsg); |
|
760 throw CException(errMsg,ExceptionCodes::ESqlArgumentError); |
|
761 } |
|
762 } |
|
763 |
|
764 try |
|
765 { |
|
766 stmtAppAttribute->ExecuteStatement(); |
|
767 stmtAppAttribute->Reset(); |
|
768 } |
|
769 catch(CException& aException) |
|
770 { |
|
771 LOGERROR(aException.GetMessageA()); |
|
772 LOGERROR("AppUid Already Present in Database"); |
|
773 } |
|
774 |
|
775 LOGEXIT("CDbLayer::AddAppAttribute()"); |
|
776 return appUid; |
|
777 } |
|
778 |
|
779 void CDbLayer::AddFileOwnershipInfo( int aAppUid, const std::vector<std::wstring>& aFileOwnershipInfo) |
|
780 { |
|
781 LOGENTER("CDbLayer::AddFileOwnershipInfo()"); |
|
782 std::string insertFileOwnershipInfo; |
|
783 |
|
784 for(ConstWstringIterator cWstringIter = aFileOwnershipInfo.begin(); cWstringIter != aFileOwnershipInfo.end() ; ++cWstringIter ) |
|
785 { |
|
786 insertFileOwnershipInfo = "INSERT INTO FileOwnershipInfo(AppUid,FileName) VALUES(?,?);"; |
|
787 std::auto_ptr<CStatement> stmtFileOwnershipInfo(iScrDbHandler->PrepareStatement(insertFileOwnershipInfo)); |
|
788 |
|
789 stmtFileOwnershipInfo->BindInt64(1, aAppUid); |
|
790 stmtFileOwnershipInfo->BindStr(2, *cWstringIter); |
|
791 |
|
792 stmtFileOwnershipInfo->ExecuteStatement(); |
|
793 stmtFileOwnershipInfo->Reset(); |
|
794 } |
|
795 LOGEXIT("CDbLayer::AddFileOwnershipInfo()"); |
|
796 } |
|
797 |
|
798 void CDbLayer::AddServiceInfo( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo>& aApplicationServiceInfo) |
|
799 { |
|
800 LOGENTER("CDbLayer::AddServiceInfo()"); |
|
801 std::string insertServiceInfo; |
|
802 |
|
803 for(ApplicationServiceInfoIterator serviceInfoIter = aApplicationServiceInfo.begin(); serviceInfoIter != aApplicationServiceInfo.end() ; ++serviceInfoIter ) |
|
804 { |
|
805 insertServiceInfo = "INSERT INTO ServiceInfo(AppUid,Uid) VALUES(?,?);"; |
|
806 std::auto_ptr<CStatement> stmtServiceInfo(iScrDbHandler->PrepareStatement(insertServiceInfo)); |
|
807 |
|
808 stmtServiceInfo->BindInt64(1, aAppUid); |
|
809 stmtServiceInfo->BindInt64(2, serviceInfoIter->iUid); |
|
810 stmtServiceInfo->ExecuteStatement(); |
|
811 stmtServiceInfo->Reset(); |
|
812 |
|
813 int serviceId = iScrDbHandler->LastInsertedId(); |
|
814 std::string insertDataType; |
|
815 |
|
816 const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TDataType>& datatype = serviceInfoIter->iDataType; |
|
817 for(ApplicationDataTypeIterator dataTypeIter = datatype.begin(); dataTypeIter != datatype.end() ; ++dataTypeIter ) |
|
818 { |
|
819 insertDataType = "INSERT INTO DataType(ServiceId,Priority,Type) VALUES(?,?,?);"; |
|
820 std::auto_ptr<CStatement> stmtDataType(iScrDbHandler->PrepareStatement(insertDataType)); |
|
821 |
|
822 stmtDataType->BindInt64(1, serviceId); |
|
823 stmtDataType->BindInt64(2, dataTypeIter->iPriority); |
|
824 #ifdef __TOOLS2_LINUX__ |
|
825 stmtDataType->BindStr(3, dataTypeIter->iType, avoidSlashConversion); |
|
826 #else |
|
827 stmtDataType->BindStr(3, dataTypeIter->iType); |
|
828 #endif |
|
829 |
|
830 stmtDataType->ExecuteStatement(); |
|
831 stmtDataType->Reset(); |
|
832 } |
|
833 } |
|
834 LOGEXIT("CDbLayer::AddServiceInfo()"); |
|
835 } |
|
836 |
|
837 void CDbLayer::AddAppLocalizableInfo( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo>& aApplicationLocalizableInfo) |
|
838 { |
|
839 LOGENTER("CDbLayer::AddAppLocalizableInfo()"); |
|
840 for(ApplicationLocalizableInfoIterator localizableInfoIter = aApplicationLocalizableInfo.begin(); localizableInfoIter != aApplicationLocalizableInfo.end() ; ++localizableInfoIter ) |
|
841 { |
|
842 AddLocalizableAttribute(aAppUid, localizableInfoIter->iLocalizableAttribute); |
|
843 int localAppInfoId = iScrDbHandler->LastInsertedId(); |
|
844 AddViewData(localAppInfoId, localizableInfoIter->iViewData); |
|
845 } |
|
846 LOGEXIT("CDbLayer::AddAppLocalizableInfo()"); |
|
847 } |
|
848 |
|
849 void CDbLayer::AddLocalizableAttribute( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute>& aApplicationLocalizableAttribute) |
|
850 { |
|
851 LOGENTER("CDbLayer::AddLocalizableAttribute()"); |
|
852 std::string insertAppLocalizableInfo; |
|
853 |
|
854 insertAppLocalizableInfo = "INSERT INTO LocalizableAppInfo(AppUid,ShortCaption,GroupName,Locale,CaptionAndIconId) VALUES(?,?,?,?,?);"; |
|
855 std::auto_ptr<CStatement> stmtAppLocalizableInfo(iScrDbHandler->PrepareStatement(insertAppLocalizableInfo)); |
|
856 |
|
857 //Assigning default value |
|
858 TInt64 intVal = 0; |
|
859 stmtAppLocalizableInfo->BindInt64(4, intVal); //Locale |
|
860 stmtAppLocalizableInfo->BindInt64(5, intVal); //CaptionAndIconId |
|
861 std::wstring strVal(L""); |
|
862 stmtAppLocalizableInfo->BindStr(2, strVal); //ShortCaption |
|
863 stmtAppLocalizableInfo->BindStr(3, strVal); //GroupName |
|
864 |
|
865 std::string insertCaptionAndIconInfo; |
|
866 |
|
867 insertCaptionAndIconInfo = "INSERT INTO CaptionAndIconInfo(Caption,NumberOfIcons,IconFile) VALUES(?,?,?);"; |
|
868 std::auto_ptr<CStatement> stmtCaptionAndIconInfo(iScrDbHandler->PrepareStatement(insertCaptionAndIconInfo)); |
|
869 |
|
870 //Assigning default value |
|
871 stmtCaptionAndIconInfo->BindStr(1, strVal); //Caption |
|
872 stmtCaptionAndIconInfo->BindInt64(2, intVal); //NumberOfIcons |
|
873 stmtCaptionAndIconInfo->BindStr(3, strVal); //IconFile |
|
874 |
|
875 |
|
876 bool captionAndIconInfoPresent = 0; |
|
877 //for every TLocalizableAttribute |
|
878 stmtAppLocalizableInfo->BindInt64(1, aAppUid); |
|
879 for(LocalizableAttributeIterator localizableAttributeIter = aApplicationLocalizableAttribute.begin(); localizableAttributeIter != aApplicationLocalizableAttribute.end() ; ++localizableAttributeIter ) |
|
880 { |
|
881 if (localizableAttributeIter->iName == L"ShortCaption") |
|
882 { |
|
883 stmtAppLocalizableInfo->BindStr(2, localizableAttributeIter->iValue); |
|
884 } |
|
885 else if(localizableAttributeIter->iName == L"GroupName") |
|
886 { |
|
887 stmtAppLocalizableInfo->BindStr(3, localizableAttributeIter->iValue); |
|
888 } |
|
889 else if(localizableAttributeIter->iName == L"Locale") |
|
890 { |
|
891 TInt64 intValue = Util::WideCharToInt64(localizableAttributeIter->iValue.c_str()); |
|
892 stmtAppLocalizableInfo->BindInt64(4, intValue); |
|
893 } |
|
894 else if(localizableAttributeIter->iName == L"Caption") |
|
895 { |
|
896 stmtCaptionAndIconInfo->BindStr(1, localizableAttributeIter->iValue); |
|
897 captionAndIconInfoPresent = 1; |
|
898 } |
|
899 else if(localizableAttributeIter->iName == L"NumberOfIcons") |
|
900 { |
|
901 TInt64 intValue = Util::WideCharToInt64(localizableAttributeIter->iValue.c_str()); |
|
902 stmtCaptionAndIconInfo->BindInt64(2, intValue); |
|
903 captionAndIconInfoPresent = 1; |
|
904 } |
|
905 else if(localizableAttributeIter->iName == L"IconFile") |
|
906 { |
|
907 stmtCaptionAndIconInfo->BindStr(3, localizableAttributeIter->iValue); |
|
908 captionAndIconInfoPresent = 1; |
|
909 } |
|
910 else |
|
911 { |
|
912 std::string errMsg = "Invalid localizable attribute."; |
|
913 LOGERROR(errMsg); |
|
914 throw CException(errMsg,ExceptionCodes::ESqlArgumentError); |
|
915 } |
|
916 } |
|
917 if (captionAndIconInfoPresent) |
|
918 { |
|
919 stmtCaptionAndIconInfo->ExecuteStatement(); |
|
920 stmtCaptionAndIconInfo->Reset(); |
|
921 int captionAndIconIdForLocalizableInfo = iScrDbHandler->LastInsertedId(); |
|
922 stmtAppLocalizableInfo->BindInt64(5, captionAndIconIdForLocalizableInfo); |
|
923 } |
|
924 stmtAppLocalizableInfo->ExecuteStatement(); |
|
925 stmtAppLocalizableInfo->Reset(); |
|
926 LOGEXIT("CDbLayer::AddLocalizableAttribute()"); |
|
927 } |
|
928 |
|
929 |
|
930 void CDbLayer::AddViewData( int alocalAppInfoId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData>& aViewData) |
|
931 { |
|
932 LOGENTER("CDbLayer::AddViewData()"); |
|
933 |
|
934 for(ViewDataIterator viewDataIter = aViewData.begin(); viewDataIter != aViewData.end() ; ++viewDataIter ) |
|
935 { |
|
936 AddViewDataAttributes(alocalAppInfoId, viewDataIter->iViewDataAttributes); |
|
937 } |
|
938 |
|
939 LOGEXIT("CDbLayer::AddViewData()"); |
|
940 } |
|
941 |
|
942 |
|
943 void CDbLayer::AddViewDataAttributes( int alocalAppInfoId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes>& aViewDataAttribute) |
|
944 { |
|
945 LOGENTER("CDbLayer::AddViewData()"); |
|
946 std::string insertViewData; |
|
947 |
|
948 insertViewData = "INSERT INTO ViewData(LocalAppInfoId,Uid,ScreenMode,CaptionAndIconId) VALUES(?,?,?,?);"; |
|
949 std::auto_ptr<CStatement> stmtViewData(iScrDbHandler->PrepareStatement(insertViewData)); |
|
950 |
|
951 |
|
952 //Assigning Default Value |
|
953 TInt64 intVal = 0; |
|
954 stmtViewData->BindInt64(2, intVal); //Uid |
|
955 stmtViewData->BindInt64(3, intVal); //ScreenMode |
|
956 stmtViewData->BindInt64(4, intVal); //CaptionAndIconId |
|
957 |
|
958 std::string insertCaptionAndIconInfo; |
|
959 |
|
960 insertCaptionAndIconInfo = "INSERT INTO CaptionAndIconInfo(Caption,NumberOfIcons,IconFile) VALUES(?,?,?);"; |
|
961 std::auto_ptr<CStatement> stmtCaptionAndIconInfo(iScrDbHandler->PrepareStatement(insertCaptionAndIconInfo)); |
|
962 |
|
963 //Assigning Default Value |
|
964 stmtCaptionAndIconInfo->BindInt64(2, intVal); //NumberOfIcons |
|
965 std::wstring strVal(L""); |
|
966 stmtCaptionAndIconInfo->BindStr(1, strVal); //Caption |
|
967 stmtCaptionAndIconInfo->BindStr(3, strVal); //IconFile |
|
968 |
|
969 bool captionAndIconInfoPresent = 0; |
|
970 //for every TViewData |
|
971 stmtViewData->BindInt64(1, alocalAppInfoId); |
|
972 |
|
973 for(ViewDataAttributeIterator viewDataIter = aViewDataAttribute.begin(); viewDataIter != aViewDataAttribute.end() ; ++viewDataIter ) |
|
974 { |
|
975 if (viewDataIter->iName == L"Uid") |
|
976 { |
|
977 TInt64 intValue = Util::WideCharToInt64(viewDataIter->iValue.c_str()); |
|
978 stmtViewData->BindInt64(2, intValue); |
|
979 } |
|
980 else if(viewDataIter->iName == L"ScreenMode") |
|
981 { |
|
982 TInt64 intValue = Util::WideCharToInt64(viewDataIter->iValue.c_str()); |
|
983 stmtViewData->BindInt64(3, intValue); |
|
984 } |
|
985 else if(viewDataIter->iName == L"Caption") |
|
986 { |
|
987 stmtCaptionAndIconInfo->BindStr(1, viewDataIter->iValue); |
|
988 captionAndIconInfoPresent = 1; |
|
989 } |
|
990 else if(viewDataIter->iName == L"NumberOfIcons") |
|
991 { |
|
992 TInt64 intValue = Util::WideCharToInt64(viewDataIter->iValue.c_str()); |
|
993 stmtCaptionAndIconInfo->BindInt64(2, intValue); |
|
994 captionAndIconInfoPresent = 1; |
|
995 } |
|
996 else if(viewDataIter->iName == L"IconFile") |
|
997 { |
|
998 stmtCaptionAndIconInfo->BindStr(3, viewDataIter->iValue); |
|
999 captionAndIconInfoPresent = 1; |
|
1000 } |
|
1001 else |
|
1002 { |
|
1003 std::string errMsg = "Invalid view data attribute."; |
|
1004 LOGERROR(errMsg); |
|
1005 throw CException(errMsg,ExceptionCodes::ESqlArgumentError); |
|
1006 } |
|
1007 } |
|
1008 if (captionAndIconInfoPresent) |
|
1009 { |
|
1010 stmtCaptionAndIconInfo->ExecuteStatement(); |
|
1011 stmtCaptionAndIconInfo->Reset(); |
|
1012 int captionAndIconIdForViewData = iScrDbHandler->LastInsertedId(); |
|
1013 stmtViewData->BindInt64(4, captionAndIconIdForViewData); |
|
1014 } |
|
1015 stmtViewData->ExecuteStatement(); |
|
1016 stmtViewData->Reset(); |
|
1017 LOGEXIT("CDbLayer::AddViewData()"); |
|
1018 } |
|
1019 |
|
1020 void CDbLayer::AddProperty( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty>& aApplicationProperty) |
|
1021 { |
|
1022 LOGENTER("CDbLayer::AddProperty()"); |
|
1023 std::string insertApplicationProperty; |
|
1024 |
|
1025 for(ApplicationPropertyIterator appPropertyIter = aApplicationProperty.begin(); appPropertyIter != aApplicationProperty.end() ; ++appPropertyIter ) |
|
1026 { |
|
1027 |
|
1028 insertApplicationProperty = "INSERT INTO AppProperties(AppUid,Locale,Name,ServiceUid,IntValue,StrValue,IsStr8Bit) VALUES(?,?,?,?,?,?,?);"; |
|
1029 std::auto_ptr<CStatement> stmtAppProperty(iScrDbHandler->PrepareStatement(insertApplicationProperty)); |
|
1030 |
|
1031 stmtAppProperty->BindInt64(1, aAppUid); |
|
1032 stmtAppProperty->BindInt(2, appPropertyIter->iLocale); |
|
1033 stmtAppProperty->BindStr(3, appPropertyIter->iName); |
|
1034 stmtAppProperty->BindInt(4, appPropertyIter->iServiceUid); |
|
1035 stmtAppProperty->BindInt(5, appPropertyIter->iIntValue); |
|
1036 |
|
1037 if(appPropertyIter->iIsStr8Bit) |
|
1038 { |
|
1039 std::string str; |
|
1040 int len = appPropertyIter->iStrValue.length(); |
|
1041 str.assign(appPropertyIter->iStrValue.c_str(),appPropertyIter->iStrValue.c_str()+len); |
|
1042 stmtAppProperty->BindBinary(6, str); |
|
1043 } |
|
1044 else |
|
1045 { |
|
1046 stmtAppProperty->BindStr(6, appPropertyIter->iStrValue); |
|
1047 } |
|
1048 |
|
1049 stmtAppProperty->BindInt(7, appPropertyIter->iIsStr8Bit); |
|
1050 |
|
1051 stmtAppProperty->ExecuteStatement(); |
|
1052 stmtAppProperty->Reset(); |
|
1053 } |
|
1054 LOGEXIT("CDbLayer::AddProperty()"); |
|
1055 } |
|
1056 |
|
1057 void CDbLayer::ExecuteStatement(const std::string& aStmtStr) |
461 void CDbLayer::ExecuteStatement(const std::string& aStmtStr) |
1058 { |
462 { |
1059 std::auto_ptr<CStatement> stmt(iScrDbHandler->PrepareStatement(aStmtStr)); |
463 std::auto_ptr<CStatement> stmt(iScrDbHandler->PrepareStatement(aStmtStr)); |
1060 stmt->ExecuteStatement(); |
464 stmt->ExecuteStatement(); |
1061 } |
465 } |