001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.coa.service;
017
018 import java.util.Map;
019 import java.util.Set;
020
021 import org.kuali.rice.kns.bo.PersistableBusinessObject;
022 import org.kuali.rice.kns.service.PersistenceStructureService;
023
024 /**
025 * Provides facilities to obtain chartofAccountsCode-accountNumber foreign key fields
026 * and the corresponding account or account-involved reference objects.
027 */
028 public interface AccountPersistenceStructureService extends PersistenceStructureService {
029
030 /**
031 * Decides if the specified class is an account related class, i.e. whether it contains chartOfAccountsCode and accountNumber as part of the primary keys.
032 * @param clazz the specified class
033 * @return true if the class contains chartOfAccountsCode and accountNumber as part of the primary keys; false otherwise.
034 */
035 public boolean isAccountRelatedClass(Class clazz);
036
037 /**
038 * Determines the list of collection accounts (or other account-involved BOs) contained within the specified parent object.
039 * For example, an Award object contains awardAccounts.
040 * Note: these do not include the following cases
041 * - nested collection accounts
042 * - non-maintainable collection accounts
043 *
044 * @param bo BusinessObject (or subclass) instance that would like to be analyzed for collection accounts.
045 * @return Map containing the collection account names (key) and class type (value) or empty map if the BO contains no collection accounts.
046 */
047 public Map<String, Class> listCollectionAccountFields(PersistableBusinessObject bo);
048
049 /**
050 * Determines the list of chartOfAccountsCode fields as one of the primary keys in the collection accounts
051 * (or other account-involved BOs) contained within the specified parent object.
052 * For example, an Award object contains awardAccounts with chartOfAccountsCode as one of the primary keys.
053 * Note: these do not include the following cases
054 * - nested collection accounts
055 * - non-maintainable collection accounts
056 *
057 * @param bo BusinessObject (or subclass) instance that would like to be analyzed for collection accounts.
058 * @return Set containing the chartOfAccountsCode field names in collection accounts or empty set if the BO contains no collection accounts.
059 */
060 public Set<String> listCollectionChartOfAccountsCodeNames(PersistableBusinessObject bo);
061
062 /**
063 * Determines the list of reference accounts (or other account-involved BOs) contained within the specified parent object.
064 * For example, an Account object contains reportsToAccount etc.
065 * Note: these do not include the following cases:
066 * - nested reference accounts
067 * - reference accounts in collections
068 * - reference accounts whose PKs are also PKs of the BO
069 * - reference accounts whose PKs don't exist in the BO as foreign keys but are referred by the maintenance page in a nested way
070 * - non-existing reference accounts whose PKs exist in the BO as foreign keys (this should never happen)
071 * - non-maintainable reference accounts
072 *
073 * @param bo BusinessObject (or subclass) instance that would like to be analyzed for reference accounts.
074 * @return Map containing the reference account names (key) and class type (value) or empty map if the BO contains no reference accounts.
075 */
076 public Map<String, Class> listReferenceAccountFields(PersistableBusinessObject bo);
077
078 /**
079 * Determines the list of chartOfAccountsCode-accountNumber pairs as (part of) the foreign keys of the reference accounts
080 * (or other account-involved BOs) contained within the specified parent object.
081 * For example, an Account object contains reportsToAccount with reportsToChartOfAccountsCode-reportsToAccountNumber as the foreign keys.
082 * Note: these do not include the following cases:
083 * - nested reference accounts
084 * - reference accounts in collections
085 * - reference accounts whose PKs are also PKs of the BO
086 * - reference accounts whose PKs don't exist in the BO as foreign keys but are referred by the maintainance page in a nested way
087 * - non-existing reference accounts whose PKs exist in the BO as foreign keys (this should never happen)
088 * - non-maintainable reference accounts
089 *
090 * @param bo BusinessObject (or subclass) instance that would like to be analyzed for reference accounts.
091 * @return Map containing the chartOfAccountsCode-accountNumber (key-value) foreign key pairs for all reference accounts or empty map if the BO contains no reference accounts.
092 */
093 public Map<String, String> listChartCodeAccountNumberPairs(PersistableBusinessObject bo);
094
095 /**
096 * Determines the list of accountNumber-chartOfAccountsCode pairs as (part of) the foreign keys of the reference accounts
097 * (or other account-involved BOs) contained within the specified parent object.
098 * For example, an Account object contains reportsToAccount with reportsToAccountNumber-reportsToChartOfAccountsCode as the foreign keys.
099 * Note: these do not include the following cases:
100 * - nested reference accounts
101 * - reference accounts in collections
102 * - reference accounts whose PKs are also PKs of the BO
103 * - reference accounts whose PKs don't exist in the BO as foreign keys but are referred by the maintainance page in a nested way
104 * - non-existing reference accounts whose PKs exist in the BO as foreign keys (this should never happen)
105 * - non-maintainable reference accounts
106 *
107 * @param bo BusinessObject (or subclass) instance that would like to be analyzed for reference accounts.
108 * @return Map containing the accountNumber-chartOfAccountsCode (key-value) foreign key pairs for all reference accounts or empty map if the BO contains no reference accounts.
109 */
110 public Map<String, String> listAccountNumberChartCodePairs(PersistableBusinessObject bo);
111
112 /**
113 * Determines the list of chartOfAccountsCode fields as one of the foreign keys of the reference accounts
114 * (or other account-involved BOs) contained within the specified parent object.
115 * For example, an Account object contains reportsToAccount with reportsToChartOfAccountsCode as one of the foreign keys.
116 * Note: these do not include the following cases:
117 * - nested reference accounts
118 * - reference accounts in collections
119 * - reference accounts whose PKs are also PKs of the BO
120 * - reference accounts whose PKs don't exist in the BO as foreign keys but are referred by the maintainance page in a nested way
121 * - non-existing reference accounts whose PKs exist in the BO as foreign keys (this should never happen)
122 * - non-maintainable reference accounts
123 *
124 * @param bo BusinessObject (or subclass) instance that would like to be analyzed for reference accounts.
125 * @return Set containing the chartOfAccountsCode foreign key names for all reference accounts or empty set if the BO contains no reference accounts.
126 */
127 public Set<String> listChartOfAccountsCodeNames(PersistableBusinessObject bo);
128
129 /**
130 * Determines the list of accountNumber fields as one of the foreign keys of the reference accounts
131 * (or other account-involved BOs) contained within the specified parent object.
132 * For example, an Account object contains reportsToAccount with reportsToAccountNumber as one of the foreign keys.
133 * Note: these do not include the following cases:
134 * - nested reference accounts
135 * - reference accounts in collections
136 * - reference accounts whose PKs are also PKs of the BO
137 * - reference accounts whose PKs don't exist in the BO as foreign keys but are referred by the maintainance page in a nested way
138 * - non-existing reference accounts whose PKs exist in the BO as foreign keys (this should never happen)
139 * - non-maintainable reference accounts
140 *
141 * @param bo BusinessObject (or subclass) instance that would like to be analyzed for reference accounts.
142 * @return Set containing the accountNumber foreign key names for all reference accounts or empty set if the BO contains no reference accounts.
143 */
144 public Set<String> listAccountNumberNames(PersistableBusinessObject bo);
145
146 /**
147 * Gets the name of the chartOfAccountsCode field as one foreign key, paired with the specified accountNumber field
148 * as the other, of the reference account (or other account-involved BO) contained within the specified parent object.
149 * For example, an Account object contains reportsToAccount with reportsToChartOfAccountsCode and reportsToAccountNumber as the foreign key pair.
150 *
151 * @param bo BusinessObject (or subclass) instance that would like to be analyzed for reference accounts.
152 * @param accountNumberFieldName the name of the foreign key corresponding to the primary key accountNumber of the reference account.
153 * @return the chartOfAccountsCode field name of the reference account identified by foreign key accountNumberFieldName, or empty string if the BO contains no such reference account.
154 */
155 public String getChartOfAccountsCodeName(PersistableBusinessObject bo, String accountNumberFieldName);
156
157 /**
158 * Gets the name of the accountNumber field as one foreign key, paired with the specified chartOfAccountsCode field
159 * as the other, of the reference account (or other account-involved BO) contained within the specified parent object.
160 * For example, an Account object contains reportsToAccount with reportsToAccountNumber and reportsToChartOfAccountsCode as the foreign key pair.
161 *
162 * @param bo BusinessObject (or subclass) instance that would like to be analyzed for reference accounts.
163 * @param chartOfAccountsCodeFieldName the name of the foreign key corresponding to the primary key chartOfAccountsCode of the reference account.
164 * @return the accountNumber field name of the reference account identified by foreign key chartOfAccountsCode, or empty string if the BO contains no such reference account.
165 */
166 public String getAccountNumberName(PersistableBusinessObject bo, String chartOfAccountsCodeFieldName);
167
168 }
169