[storage] Allow to hook loading in 'load query'
[abstract.git] / view / aaTreeViewTranscript.cpp
blobc92a07439600756710d97f243f3309e97f036351
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: */
3 /*
4 * Copyright (C) 2007 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 <abstract/aacore.h>
24 #include "nsCOMPtr.h"
25 #include "nsServiceManagerUtils.h"
26 #include "nsStringAPI.h"
27 #include "nsEmbedString.h"
29 /* Unfrozen API */
30 #include "unstable/nsIArray.h"
31 #include "unstable/nsArrayUtils.h"
32 #include "unstable/nsITreeColumns.h"
33 #include "unstable/nsIAtom.h"
34 #include "unstable/nsIAtomService.h"
36 /* Project includes */
37 #include <abstract/base/aaIEntity.h>
38 #include <abstract/base/aaIFlow.h>
39 #include <abstract/base/aaIResource.h>
40 #include <abstract/base/aaIFact.h>
41 #include <abstract/base/aaITransaction.h>
42 #include <abstract/storage/aaILoadQuery.h>
43 #include <abstract/report/aaITranscript.h>
44 #include <abstract/view/aaViewUtils.h>
45 #include "aaTreeView.h"
46 #include "aaTreeViewTranscript.h"
48 aaTreeViewTranscript::aaTreeViewTranscript()
52 aaTreeViewTranscript::~aaTreeViewTranscript()
56 NS_IMPL_ISUPPORTS_INHERITED0(aaTreeViewTranscript, aaTreeView)
58 /* Helpers */
59 PRBool
60 chooseSide(aaIFact *fact, PRInt64 ownId)
62 if (! fact)
63 return PR_FALSE;
65 if (fact->PickTakeFrom() && fact->PickTakeFrom()->PickId() == ownId)
66 return PR_FALSE;
67 else
68 return PR_TRUE;
71 nsresult
72 aaTreeViewTranscript::getColumn0(aaITransaction *txn, PRInt64 flowId,
73 nsAString & _retval)
75 if (! txn->PickFact())
76 return NS_OK;
78 assignDate(_retval, txn->PickFact()->PickTime());
79 return NS_OK;
82 nsresult
83 aaTreeViewTranscript::getColumn1(aaITransaction *txn, PRInt64 flowId,
84 nsAString & _retval)
86 if (! txn->PickFact())
87 return NS_OK;
89 aaIFlow *flow = nsnull;
90 if (chooseSide(txn->PickFact(), flowId)) {
91 flow = txn->PickFact()->PickTakeFrom();
92 } else {
93 flow = txn->PickFact()->PickGiveTo();
96 if (flow)
97 flow->GetTag(_retval);
99 return NS_OK;
102 nsresult
103 aaTreeViewTranscript::getColumn2(aaITransaction *txn, PRInt64 flowId,
104 nsAString & _retval)
106 if (! txn->PickFact())
107 return NS_OK;
109 if (chooseSide(txn->PickFact(), flowId)) {
110 assignDouble(_retval, txn->PickValue());
113 return NS_OK;
116 nsresult
117 aaTreeViewTranscript::getColumn3(aaITransaction *txn, PRInt64 flowId,
118 nsAString & _retval)
120 if (! txn->PickFact())
121 return NS_OK;
123 if (! chooseSide(txn->PickFact(), flowId)) {
124 assignDouble(_retval, txn->PickValue());
127 return NS_OK;
130 nsresult (*const aaTreeViewTranscript::colFuncs[])(aaITransaction *,
131 PRInt64 flowId, nsAString &) =
133 &aaTreeViewTranscript::getColumn0
134 ,&aaTreeViewTranscript::getColumn1
135 ,&aaTreeViewTranscript::getColumn2
136 ,&aaTreeViewTranscript::getColumn3
139 /* Private functions */
140 nsresult
141 aaTreeViewTranscript::doGetCellText(PRInt32 row, nsITreeColumn *col,
142 nsAString & _retval)
144 nsresult rv;
145 _retval.Truncate();
147 PRInt32 ci = getColumnIndex(col, sizeof(colFuncs));
148 NS_ENSURE_TRUE(ci >= 0, NS_OK);
150 nsCOMPtr<aaITransaction> txn(do_QueryElementAt(mDataSet, row, &rv));
151 NS_ENSURE_SUCCESS(rv, rv);
152 NS_ENSURE_TRUE(txn, NS_OK);
154 nsCOMPtr<aaITranscript> transcript(do_QueryInterface(mDataSet, &rv));
155 NS_ENSURE_SUCCESS(rv, rv);
157 if (! transcript->PickLoadedFlow())
158 return NS_OK;
159 return colFuncs[ci](txn,transcript->PickLoadedFlow()->PickId(), _retval);