1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=2 sw=2 sts=2 et cindent tw=79 ft=cpp: */
4 * Copyright (C) 2008 Sergey Yanovich <ynvich@gmail.com>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public
17 * License along with this program; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
22 #include "xpcom-config.h"
25 #include "nsIMutableArray.h"
26 #include "nsComponentManagerUtils.h"
27 #include "nsStringAPI.h"
31 /* Project includes */
32 #include "aaIEntity.h"
33 #include "aaIResource.h"
41 #include "aaIIncome.h"
42 #include "aaITransaction.h"
44 #include "aaBaseKeys.h"
45 #include "aaChartKeys.h"
46 #include "aaStorageUtils.h"
47 #include "aaISqlRequest.h"
48 #include "aaISqlResult.h"
49 #include "aaLoadBuilder.h"
52 NS_IMPL_ISUPPORTS2(aaLoadBuilder
,
57 aaLoadBuilder::Load(aaISqlResult
*result
, aaIDataNode
**_retval
)
59 NS_ENSURE_ARG_POINTER(result
);
63 nsCOMPtr
<aaIDataNode
> iid
= do_QueryInterface(mData
, &rv
);
64 rv
= iid
->Accept(this);
65 NS_ENSURE_SUCCESS(rv
, rv
);
67 NS_IF_ADDREF(*_retval
= mResult
);
73 aaLoadBuilder::HandleNode(aaIListNode
*aNode
)
76 nsCOMPtr
<aaIListNode
> item
= aNode
;
78 item
= do_CreateInstance(AA_ENTITY_CONTRACT
, &rv
);
79 NS_ENSURE_SUCCESS(rv
, rv
);
83 rv
= mData
->GetInt64(getColumn("id"), &id
);
84 NS_ENSURE_SUCCESS(rv
, rv
);
86 NS_ENSURE_SUCCESS(rv
, rv
);
94 aaLoadBuilder::HandleEntity(aaIEntity
*aEntity
)
97 nsCOMPtr
<aaIEntity
> item
= do_CreateInstance(AA_ENTITY_CONTRACT
, &rv
);
98 NS_ENSURE_SUCCESS(rv
, rv
);
100 rv
= HandleNode(item
);
101 NS_ENSURE_SUCCESS(rv
, rv
);
104 rv
= mData
->GetUTF8String(getColumn("tag"), tag
);
105 NS_ENSURE_SUCCESS(rv
, rv
);
106 rv
= item
->SetTag(NS_ConvertUTF8toUTF16(tag
));
107 NS_ENSURE_SUCCESS(rv
, rv
);
114 aaLoadBuilder::HandleResource(aaIResource
*aResource
)
118 rv
= mData
->GetInt32(getColumn("type"), &type
);
119 NS_ENSURE_SUCCESS(rv
, rv
);
121 case aaIResource::TYPE_MONEY
:
122 rv
= HandleMoney(nsnull
);
123 NS_ENSURE_SUCCESS(rv
, rv
);
125 case aaIResource::TYPE_ASSET
:
126 rv
= HandleAsset(nsnull
);
127 NS_ENSURE_SUCCESS(rv
, rv
);
130 NS_ASSERTION(PR_FALSE
, "Wrong resource type.");
131 return NS_ERROR_UNEXPECTED
;
137 aaLoadBuilder::HandleMoney(aaIMoney
*aMoney
)
140 nsCOMPtr
<aaIMoney
> item
= do_CreateInstance(AA_MONEY_CONTRACT
, &rv
);
141 NS_ENSURE_SUCCESS(rv
, rv
);
144 rv
= mData
->GetInt64(getColumn("id"), &id
);
145 NS_ENSURE_SUCCESS(rv
, rv
);
146 rv
= item
->SetNumCode(id
);
147 NS_ENSURE_SUCCESS(rv
, rv
);
149 nsCAutoString alphaCode
;
150 rv
= mData
->GetUTF8String(getColumn("alpha_code"), alphaCode
);
151 NS_ENSURE_SUCCESS(rv
, rv
);
152 rv
= item
->SetAlphaCode(NS_ConvertUTF8toUTF16(alphaCode
));
153 NS_ENSURE_SUCCESS(rv
, rv
);
160 aaLoadBuilder::HandleAsset(aaIAsset
*aAsset
)
163 nsCOMPtr
<aaIAsset
> item
= do_CreateInstance(AA_ASSET_CONTRACT
, &rv
);
164 NS_ENSURE_SUCCESS(rv
, rv
);
167 rv
= mData
->GetInt64(getColumn("id"), &id
);
168 NS_ENSURE_SUCCESS(rv
, rv
);
169 rv
= item
->SetId(id
);
170 NS_ENSURE_SUCCESS(rv
, rv
);
173 rv
= mData
->GetUTF8String(getColumn("tag"), tag
);
174 NS_ENSURE_SUCCESS(rv
, rv
);
175 rv
= item
->SetTag(NS_ConvertUTF8toUTF16(tag
));
176 NS_ENSURE_SUCCESS(rv
, rv
);
183 aaLoadBuilder::HandleFlow(aaIFlow
*aFlow
)
187 PRUint32 colId
= getColumn("id");
189 PRBool isNull
= PR_TRUE
;
191 if (colId
!= (PRUint32
) -1) {
192 rv
= mData
->GetIsNull(colId
, &isNull
);
193 NS_ENSURE_SUCCESS(rv
, rv
);
196 rv
= mData
->GetInt64(colId
, &id
);
197 NS_ENSURE_SUCCESS(rv
, rv
);
200 mResult
= do_CreateInstance(AA_INCOMEFLOW_CONTRACT
, &rv
);
201 NS_ENSURE_SUCCESS(rv
, rv
);
206 nsCOMPtr
<aaIFlow
> item
= do_CreateInstance(AA_FLOW_CONTRACT
, &rv
);
207 NS_ENSURE_SUCCESS(rv
, rv
);
208 rv
= item
->SetId(id
);
209 NS_ENSURE_SUCCESS(rv
, rv
);
212 rv
= mData
->GetUTF8String(getColumn("tag"), tag
);
213 NS_ENSURE_SUCCESS(rv
, rv
);
214 rv
= item
->SetTag(NS_ConvertUTF8toUTF16(tag
));
215 NS_ENSURE_SUCCESS(rv
, rv
);
218 rv
= mData
->GetDouble(getColumn("rate"), &rate
);
219 NS_ENSURE_SUCCESS(rv
, rv
);
220 rv
= item
->SetRate(rate
);
221 NS_ENSURE_SUCCESS(rv
, rv
);
223 PRUint32 colOffBalance
= getColumn("off_balance");
224 if (colOffBalance
!= (PRUint32
) -1) {
226 rv
= mData
->GetInt32(colOffBalance
, &isOffBalance
);
227 NS_ENSURE_SUCCESS(rv
, rv
);
228 rv
= item
->SetIsOffBalance(isOffBalance
);
229 NS_ENSURE_SUCCESS(rv
, rv
);
233 aaLoadBuilder::PrefixStacker
stacker(this);
234 rv
= appendPrefix("entity.");
235 NS_ENSURE_SUCCESS(rv
, rv
);
236 rv
= HandleEntity(nsnull
);
237 NS_ENSURE_SUCCESS(rv
, rv
);
238 nsCOMPtr
<aaIEntity
> entity
= do_QueryInterface(mResult
, &rv
);
239 NS_ENSURE_SUCCESS(rv
, rv
);
240 rv
= item
->SetEntity(entity
);
241 NS_ENSURE_SUCCESS(rv
, rv
);
245 aaLoadBuilder::PrefixStacker
stacker(this);
246 rv
= appendPrefix("give_resource.");
247 NS_ENSURE_SUCCESS(rv
, rv
);
248 rv
= HandleResource(nsnull
);
249 NS_ENSURE_SUCCESS(rv
, rv
);
250 nsCOMPtr
<aaIResource
> resource
= do_QueryInterface(mResult
, &rv
);
251 NS_ENSURE_SUCCESS(rv
, rv
);
252 rv
= item
->SetGiveResource(resource
);
253 NS_ENSURE_SUCCESS(rv
, rv
);
257 aaLoadBuilder::PrefixStacker
stacker(this);
258 rv
= appendPrefix("take_resource.");
259 NS_ENSURE_SUCCESS(rv
, rv
);
260 rv
= HandleResource(nsnull
);
261 NS_ENSURE_SUCCESS(rv
, rv
);
262 nsCOMPtr
<aaIResource
> resource
= do_QueryInterface(mResult
, &rv
);
263 NS_ENSURE_SUCCESS(rv
, rv
);
264 rv
= item
->SetTakeResource(resource
);
265 NS_ENSURE_SUCCESS(rv
, rv
);
272 aaLoadBuilder::HandleRule(aaIRule
*aRule
)
275 nsCOMPtr
<aaIRule
> item
= do_CreateInstance(AA_RULE_CONTRACT
, &rv
);
276 NS_ENSURE_SUCCESS(rv
, rv
);
278 rv
= HandleNode(item
);
279 NS_ENSURE_SUCCESS(rv
, rv
);
281 PRBool changeSide
, factSide
;
282 rv
= mData
->GetInt32(getColumn("fact_side"), &factSide
);
283 NS_ENSURE_SUCCESS(rv
, rv
);
284 rv
= item
->SetFactSide(factSide
);
285 NS_ENSURE_SUCCESS(rv
, rv
);
287 rv
= mData
->GetInt32(getColumn("change_side"), &changeSide
);
288 NS_ENSURE_SUCCESS(rv
, rv
);
289 rv
= item
->SetChangeSide(changeSide
);
290 NS_ENSURE_SUCCESS(rv
, rv
);
293 rv
= mData
->GetDouble(getColumn("rate"), &rate
);
294 NS_ENSURE_SUCCESS(rv
, rv
);
295 rv
= item
->SetRate(rate
);
296 NS_ENSURE_SUCCESS(rv
, rv
);
299 rv
= mData
->GetUTF8String(getColumn("tag"), tag
);
300 NS_ENSURE_SUCCESS(rv
, rv
);
301 rv
= item
->SetTag(NS_ConvertUTF8toUTF16(tag
));
302 NS_ENSURE_SUCCESS(rv
, rv
);
305 aaLoadBuilder::PrefixStacker
stacker(this);
306 rv
= appendPrefix("take_flow.");
307 NS_ENSURE_SUCCESS(rv
, rv
);
308 rv
= HandleFlow(nsnull
);
309 NS_ENSURE_SUCCESS(rv
, rv
);
310 nsCOMPtr
<aaIFlow
> flow
= do_QueryInterface(mResult
, &rv
);
311 NS_ENSURE_SUCCESS(rv
, rv
);
312 rv
= item
->SetTakeFrom(flow
);
313 NS_ENSURE_SUCCESS(rv
, rv
);
317 aaLoadBuilder::PrefixStacker
stacker(this);
318 rv
= appendPrefix("give_flow.");
319 NS_ENSURE_SUCCESS(rv
, rv
);
320 rv
= HandleFlow(nsnull
);
321 NS_ENSURE_SUCCESS(rv
, rv
);
322 nsCOMPtr
<aaIFlow
> flow
= do_QueryInterface(mResult
, &rv
);
323 NS_ENSURE_SUCCESS(rv
, rv
);
324 rv
= item
->SetGiveTo(flow
);
325 NS_ENSURE_SUCCESS(rv
, rv
);
333 aaLoadBuilder::HandleState(aaIState
*aState
)
336 nsCOMPtr
<aaIState
> item
= aState
;
339 item
= do_CreateInstance(AA_STATE_CONTRACT
, &rv
);
340 NS_ENSURE_SUCCESS(rv
, rv
);
344 aaLoadBuilder::PrefixStacker
stacker(this);
345 rv
= appendPrefix("flow.");
346 NS_ENSURE_SUCCESS(rv
, rv
);
347 rv
= HandleFlow(nsnull
);
348 NS_ENSURE_SUCCESS(rv
, rv
);
349 nsCOMPtr
<aaIFlow
> flow
= do_QueryInterface(mResult
, &rv
);
350 NS_ENSURE_SUCCESS(rv
, rv
);
352 if (flow
->PickId()) {
353 rv
= item
->SetFlow(flow
);
354 NS_ENSURE_SUCCESS(rv
, rv
);
358 PRUint32 col
= getColumn("id");
359 PRBool isNull
= PR_TRUE
;
360 if (col
!= (PRUint32
) -1) {
361 rv
= mData
->GetIsNull(col
, &isNull
);
362 NS_ENSURE_SUCCESS(rv
, rv
);
371 rv
= mData
->GetInt64(col
, &id
);
372 NS_ENSURE_SUCCESS(rv
, rv
);
373 rv
= item
->SetId(id
);
374 NS_ENSURE_SUCCESS(rv
, rv
);
378 rv
= mData
->GetInt32(getColumn("side"), &side
);
379 NS_ENSURE_SUCCESS(rv
, rv
);
380 rv
= item
->SetSide(side
);
381 NS_ENSURE_SUCCESS(rv
, rv
);
384 rv
= mData
->GetDouble(getColumn("amount"), &amount
);
385 NS_ENSURE_SUCCESS(rv
, rv
);
386 rv
= item
->SetAmount(amount
);
387 NS_ENSURE_SUCCESS(rv
, rv
);
390 rv
= mData
->GetInt64(getColumn("start"), &start
);
391 NS_ENSURE_SUCCESS(rv
, rv
);
392 rv
= item
->SetStart(start
* 1000000);
393 NS_ENSURE_SUCCESS(rv
, rv
);
395 PRUint32 colPaid
= getColumn("paid");
396 NS_ENSURE_TRUE(colPaid
!= (PRUint32
) -1, NS_ERROR_INVALID_ARG
);
397 rv
= mData
->GetIsNull(colPaid
, &isNull
);
398 NS_ENSURE_SUCCESS(rv
, rv
);
401 rv
= mData
->GetInt64(colPaid
, &end
);
402 NS_ENSURE_SUCCESS(rv
, rv
);
403 rv
= item
->SetEnd(end
* 1000000);
404 NS_ENSURE_SUCCESS(rv
, rv
);
413 aaLoadBuilder::HandleFact(aaIFact
*aFact
)
416 nsCOMPtr
<aaIFact
> item
= do_CreateInstance(AA_FACT_CONTRACT
, &rv
);
417 NS_ENSURE_SUCCESS(rv
, rv
);
420 rv
= mData
->GetInt64(getColumn("id"), &id
);
421 NS_ENSURE_SUCCESS(rv
, rv
);
422 rv
= item
->SetId(id
);
423 NS_ENSURE_SUCCESS(rv
, rv
);
426 rv
= mData
->GetDouble(getColumn("amount"), &amount
);
427 NS_ENSURE_SUCCESS(rv
, rv
);
428 rv
= item
->SetAmount(amount
);
429 NS_ENSURE_SUCCESS(rv
, rv
);
432 aaLoadBuilder::PrefixStacker
stacker(this);
433 rv
= appendPrefix("event.");
434 NS_ENSURE_SUCCESS(rv
, rv
);
435 rv
= HandleEvent(nsnull
);
436 NS_ENSURE_SUCCESS(rv
, rv
);
437 nsCOMPtr
<aaIEvent
> event
= do_QueryInterface(mResult
, &rv
);
438 NS_ENSURE_SUCCESS(rv
, rv
);
439 rv
= item
->SetEvent(event
);
440 NS_ENSURE_SUCCESS(rv
, rv
);
444 aaLoadBuilder::PrefixStacker
stacker(this);
445 rv
= appendPrefix("giveToFlow.");
446 NS_ENSURE_SUCCESS(rv
, rv
);
447 rv
= HandleFlow(nsnull
);
448 NS_ENSURE_SUCCESS(rv
, rv
);
449 nsCOMPtr
<aaIFlow
> flow
= do_QueryInterface(mResult
, &rv
);
450 NS_ENSURE_SUCCESS(rv
, rv
);
451 rv
= item
->SetGiveTo(flow
);
452 NS_ENSURE_SUCCESS(rv
, rv
);
456 aaLoadBuilder::PrefixStacker
stacker(this);
457 rv
= appendPrefix("takeFromFlow.");
458 NS_ENSURE_SUCCESS(rv
, rv
);
459 rv
= HandleFlow(nsnull
);
460 NS_ENSURE_SUCCESS(rv
, rv
);
461 nsCOMPtr
<aaIFlow
> flow
= do_QueryInterface(mResult
, &rv
);
462 NS_ENSURE_SUCCESS(rv
, rv
);
463 rv
= item
->SetTakeFrom(flow
);
464 NS_ENSURE_SUCCESS(rv
, rv
);
472 aaLoadBuilder::HandleEvent(aaIEvent
*aEvent
)
475 nsCOMPtr
<aaIEvent
> item
= do_CreateInstance(AA_EVENT_CONTRACT
, &rv
);
476 NS_ENSURE_SUCCESS(rv
, rv
);
479 rv
= mData
->GetInt64(getColumn("time"), &time
);
480 NS_ENSURE_SUCCESS(rv
, rv
);
481 rv
= item
->SetTime(time
* 1000000);
482 NS_ENSURE_SUCCESS(rv
, rv
);
485 rv
= mData
->GetInt64(getColumn("id"), &id
);
486 NS_ENSURE_SUCCESS(rv
, rv
);
487 rv
= item
->SetId(id
);
488 NS_ENSURE_SUCCESS(rv
, rv
);
495 aaLoadBuilder::HandleQuote(aaIQuote
*aQuote
)
498 PRUint32 colRate
= getColumn("rate");
499 if (colRate
== (PRUint32
) -1) {
504 nsCOMPtr
<aaIQuote
> item
= do_CreateInstance(AA_QUOTE_CONTRACT
, &rv
);
505 NS_ENSURE_SUCCESS(rv
, rv
);
508 aaLoadBuilder::PrefixStacker
stacker(this);
509 rv
= appendPrefix("money.");
510 NS_ENSURE_SUCCESS(rv
, rv
);
511 rv
= HandleMoney(nsnull
);
512 NS_ENSURE_SUCCESS(rv
, rv
);
513 nsCOMPtr
<aaIResource
> resource
= do_QueryInterface(mResult
, &rv
);
514 NS_ENSURE_SUCCESS(rv
, rv
);
515 rv
= item
->SetResource(resource
);
516 NS_ENSURE_SUCCESS(rv
, rv
);
519 PRUint32 colChart
= getColumn("is_chart");
520 PRBool isNull
= PR_TRUE
;
521 if (colChart
!= (PRUint32
) -1) {
522 rv
= mData
->GetIsNull(colChart
, &isNull
);
523 NS_ENSURE_SUCCESS(rv
, rv
);
526 rv
= item
->SetRate(1.0);
527 NS_ENSURE_SUCCESS(rv
, rv
);
534 rv
= mData
->GetIsNull(colRate
, &isNull
);
535 NS_ENSURE_SUCCESS(rv
, rv
);
540 rv
= mData
->GetDouble(colRate
, &rate
);
541 NS_ENSURE_SUCCESS(rv
, rv
);
542 rv
= item
->SetRate(rate
);
543 NS_ENSURE_SUCCESS(rv
, rv
);
546 rv
= mData
->GetInt64(getColumn("time"), &time
);
547 NS_ENSURE_SUCCESS(rv
, rv
);
548 rv
= item
->SetTime(time
* 1000000);
549 NS_ENSURE_SUCCESS(rv
, rv
);
552 rv
= mData
->GetDouble(getColumn("diff"), &diff
);
553 NS_ENSURE_SUCCESS(rv
, rv
);
554 rv
= item
->SetDiff(diff
);
555 NS_ENSURE_SUCCESS(rv
, rv
);
562 aaLoadBuilder::HandleTransaction(aaITransaction
*aTransaction
)
565 nsCOMPtr
<aaIFact
> fact
;
567 aaLoadBuilder::PrefixStacker
stacker(this);
568 rv
= appendPrefix("fact.");
569 NS_ENSURE_SUCCESS(rv
, rv
);
570 rv
= HandleFact(nsnull
);
571 NS_ENSURE_SUCCESS(rv
, rv
);
572 fact
= do_QueryInterface(mResult
, &rv
);
573 NS_ENSURE_SUCCESS(rv
, rv
);
576 PRUint32 colValue
= getColumn("value");
577 NS_ENSURE_TRUE(colValue
!= (PRUint32
) -1, NS_ERROR_INVALID_ARG
);
579 PRBool isNull
= PR_FALSE
;
580 rv
= mData
->GetIsNull(colValue
, &isNull
);
581 NS_ENSURE_SUCCESS(rv
, rv
);
588 nsCOMPtr
<aaITransaction
> item
589 = do_CreateInstance(AA_TRANSACTION_CONTRACT
, &rv
);
590 NS_ENSURE_SUCCESS(rv
, rv
);
592 rv
= item
->SetFact(fact
);
593 NS_ENSURE_SUCCESS(rv
, rv
);
596 rv
= mData
->GetDouble(colValue
, &value
);
597 NS_ENSURE_SUCCESS(rv
, rv
);
598 rv
= item
->SetValue(value
);
599 NS_ENSURE_SUCCESS(rv
, rv
);
601 PRUint32 colEarnings
= getColumn("earnings");
602 NS_ENSURE_TRUE(colEarnings
!= (PRUint32
) -1, NS_ERROR_INVALID_ARG
);
603 rv
= mData
->GetIsNull(colEarnings
, &isNull
);
604 NS_ENSURE_SUCCESS(rv
, rv
);
607 rv
= mData
->GetDouble(colEarnings
, &earnings
);
608 NS_ENSURE_SUCCESS(rv
, rv
);
609 rv
= item
->SetEarnings(earnings
);
610 NS_ENSURE_SUCCESS(rv
, rv
);
617 /* aaIChartHandler */
619 aaLoadBuilder::HandleChart(aaIChart
*aChart
)
622 nsCOMPtr
<aaIChart
> item
= do_CreateInstance(AA_CHART_CONTRACT
, &rv
);
623 NS_ENSURE_SUCCESS(rv
, rv
);
626 aaLoadBuilder::PrefixStacker
stacker(this);
627 rv
= appendPrefix("resource.");
628 NS_ENSURE_SUCCESS(rv
, rv
);
629 rv
= HandleMoney(nsnull
);
630 NS_ENSURE_SUCCESS(rv
, rv
);
631 nsCOMPtr
<aaIMoney
> resource
= do_QueryInterface(mResult
, &rv
);
632 NS_ENSURE_SUCCESS(rv
, rv
);
633 rv
= item
->SetCurrency(resource
);
634 NS_ENSURE_SUCCESS(rv
, rv
);
642 aaLoadBuilder::HandleBalance(aaIBalance
*aBalance
)
645 nsCOMPtr
<aaIBalance
> item
= aBalance
;;
647 item
= do_CreateInstance(AA_STATE_CONTRACT
, &rv
);
648 NS_ENSURE_SUCCESS(rv
, rv
);
651 rv
= HandleState(item
);
652 NS_ENSURE_SUCCESS(rv
, rv
);
655 PRUint32 colVal
= getColumn("value");
656 NS_ENSURE_TRUE(colVal
!= (PRUint32
) -1, NS_ERROR_UNEXPECTED
);
657 PRBool isNull
= PR_FALSE
;
658 rv
= mData
->GetIsNull(colVal
, &isNull
);
659 NS_ENSURE_SUCCESS(rv
, rv
);
661 rv
= mData
->GetDouble(colVal
, &value
);
662 NS_ENSURE_SUCCESS(rv
, rv
);
663 rv
= item
->SetInitValue(value
);
664 NS_ENSURE_SUCCESS(rv
, rv
);
668 aaLoadBuilder::PrefixStacker
stacker(this);
669 rv
= appendPrefix("quote1.");
670 NS_ENSURE_SUCCESS(rv
, rv
);
671 rv
= HandleQuote(nsnull
);
672 NS_ENSURE_SUCCESS(rv
, rv
);
674 nsCOMPtr
<aaIQuote
> quote
= do_QueryInterface(mResult
, &rv
);
675 NS_ENSURE_SUCCESS(rv
, rv
);
676 rv
= item
->ApplyQuote(quote
);
677 NS_ENSURE_SUCCESS(rv
, rv
);
682 aaLoadBuilder::PrefixStacker
stacker(this);
683 rv
= appendPrefix("quote0.");
684 NS_ENSURE_SUCCESS(rv
, rv
);
685 rv
= HandleQuote(nsnull
);
686 NS_ENSURE_SUCCESS(rv
, rv
);
688 nsCOMPtr
<aaIQuote
> quote
= do_QueryInterface(mResult
, &rv
);
689 NS_ENSURE_SUCCESS(rv
, rv
);
690 rv
= item
->ApplyQuote(quote
);
691 NS_ENSURE_SUCCESS(rv
, rv
);
701 aaLoadBuilder::HandleIncome(aaIBalance
*aIncome
)
704 nsCOMPtr
<aaIIncome
> item
= do_CreateInstance(AA_INCOME_CONTRACT
, &rv
);
705 NS_ENSURE_SUCCESS(rv
, rv
);
707 rv
= HandleBalance(item
);
708 NS_ENSURE_SUCCESS(rv
, rv
);
710 PRBool isNull
= PR_TRUE
;
711 PRUint32 colIndex
= getColumn("credit_diff");
712 NS_ENSURE_TRUE(colIndex
!= (PRUint32
) -1, NS_ERROR_INVALID_ARG
);
713 rv
= mData
->GetIsNull(colIndex
, &isNull
);
714 NS_ENSURE_SUCCESS(rv
, rv
);
717 rv
= mData
->GetDouble(colIndex
, &credit_diff
);
718 NS_ENSURE_SUCCESS(rv
, rv
);
719 rv
= item
->SetCreditDiff(credit_diff
);
720 NS_ENSURE_SUCCESS(rv
, rv
);
724 colIndex
= getColumn("debit_diff");
725 NS_ENSURE_TRUE(colIndex
!= (PRUint32
) -1, NS_ERROR_INVALID_ARG
);
726 rv
= mData
->GetIsNull(colIndex
, &isNull
);
727 NS_ENSURE_SUCCESS(rv
, rv
);
730 rv
= mData
->GetDouble(colIndex
, &debit_diff
);
731 NS_ENSURE_SUCCESS(rv
, rv
);
732 rv
= item
->SetDebitDiff(debit_diff
);
733 NS_ENSURE_SUCCESS(rv
, rv
);
740 /* Private methods */
742 aaLoadBuilder::appendPrefix(const char *aElement
)
744 PRUint32 len
= strlen(aElement
);
745 NS_ENSURE_TRUE(mIndex
+ len
< AA_BUILD_BUFFER_SIZE
, NS_ERROR_UNEXPECTED
);
746 strcpy(&mPrefix
[mIndex
], aElement
);
752 aaLoadBuilder::getColumn(const char *aElement
)
754 aaLoadBuilder::PrefixStacker
stacker(this);
756 PRUint32 column
= -1;
757 rv
= appendPrefix(aElement
);
758 NS_ENSURE_SUCCESS(rv
, -1);
759 rv
= mData
->GetColumn(mPrefix
, &column
);
760 NS_ENSURE_SUCCESS(rv
, -1);