01: /*
02: *
03: * JMoney - A Personal Finance Manager
04: * Copyright (c) 2002 Johann Gyger <johann.gyger@switzerland.org>
05: * Copyright (c) 2004 Nigel Westbury <westbury@users.sourceforge.net>
06: *
07: *
08: * This program is free software; you can redistribute it and/or modify
09: * it under the terms of the GNU General Public License as published by
10: * the Free Software Foundation; either version 2 of the License, or
11: * (at your option) any later version.
12: *
13: * This program is distributed in the hope that it will be useful,
14: * but WITHOUT ANY WARRANTY; without even the implied warranty of
15: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16: * GNU General Public License for more details.
17: *
18: * You should have received a copy of the GNU General Public License
19: * along with this program; if not, write to the Free Software
20: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21: *
22: */
23:
24: package net.sf.jmoney.model2;
25:
26: import java.util.Collection;
27: import java.util.Date;
28:
29: /**
30: * Interface containing methods that execute queries against the datastore.
31: * <P>
32: * Plug-ins that implement a datastore may optionally implement this interface.
33: * Consumers obtain this interface through the getAdapter method in the session
34: * object.
35: * <P>
36: * The queries in this interface are all require access to the list of entries
37: * and therefore it is a good idea for datastore implementations to implement
38: * this interface if the entries are not cached in memory.
39: * <P>
40: * @author Nigel Westbury
41: */
42: public interface IEntryQueries {
43:
44: /**
45: * Sum the amount for all entries in the given range
46: * (inclusive of the 'from' and 'to' dates).
47: *
48: * @param account
49: * @param fromDate
50: * @param toDate
51: * @return
52: */
53: long sumOfAmounts(CurrencyAccount account, Date fromDate,
54: Date toDate);
55:
56: /**
57: * Return a sorted collection of Entry objects.
58: * The returned Collection is be implemented by the datastore.
59: * The implementation is therefore optimized by the datastore.
60: * For example, if the datastore is a JDBC database then the size()
61: * method will get the count from the database by executing a command
62: * of the form "select count(*) from entries where account = ?".
63: * The entries themselves will not be read from the database unless
64: * the Collection is iterated or the toArray method is called.
65: * If the datastore is backed by a database that supports an
66: * ORDER BY clause then the sorting will generally be passed on
67: * the the database.
68: *
69: * @param account The account whose entries are to be returned.
70: * @param sortProperty The property used for the sort. This property
71: * may be a property in the Entry object, a property in
72: * the Transaction object, or a property in the Account object.
73: * @param descending if true, sort in descending order
74: * @return
75: */
76: Collection<Entry> getSortedEntries(CapitalAccount account,
77: PropertyAccessor sortProperty, boolean descending);
78:
79: /**
80: * Return the total amount of entries in the account in each month.
81: * The range of months are given by the startYear, startMonth, and
82: * numberOfMonths parameters.
83: *
84: * @param startYear
85: * @param startMonth
86: * @param numberOfMonths
87: * @param includeSubAccounts
88: * @return An array with a size equal to the numberOfMonths
89: */
90: long[] getEntryTotalsByMonth(CapitalAccount account, int startYear,
91: int startMonth, int numberOfMonths,
92: boolean includeSubAccounts);
93: }
|