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.gl.businessobject.lookup;
017
018 import java.util.ArrayList;
019 import java.util.HashMap;
020 import java.util.Iterator;
021 import java.util.List;
022 import java.util.Map;
023
024 import org.kuali.kfs.sys.KFSPropertyConstants;
025
026 /**
027 * This class converts field values from G/L Business Objects to G?L transactions
028 */
029 public class BusinessObjectFieldConverter {
030
031 /**
032 * This method converts the field values from normal GL business objects to GL transaction
033 *
034 * @param fields list of fields in GL business object
035 * @return the list of fields for GL transaction
036 */
037 public static List convertToTransactionFields(List fields) {
038 List transactionFields = new ArrayList();
039
040 Iterator propsIter = fields.iterator();
041 while (propsIter.hasNext()) {
042 String propertyName = (String) propsIter.next();
043
044 // convert property name from normal BO to GL transaction
045 String transactionPropertyName = propertyName;
046
047 Map propertyMappingTable = getPropertyMappingTable();
048 transactionPropertyName = convertPropertyName(propertyMappingTable, propertyName);
049
050 // create a new entry for current property
051 transactionFields.add(transactionPropertyName);
052 }
053 return transactionFields;
054 }
055
056 /**
057 * This method converts the field values from normal GL business objects to GL transaction
058 *
059 * @param fieldValues the map of field values for normal GL business objects
060 * @return the map of field values for GL transaction
061 */
062 public static Map convertToTransactionFieldValues(Map fieldValues) {
063 Map transactionFieldValues = new HashMap();
064
065 Iterator propsIter = fieldValues.keySet().iterator();
066 while (propsIter.hasNext()) {
067 String propertyName = (String) propsIter.next();
068 String propertyValue = (String) fieldValues.get(propertyName);
069
070 // convert property name from normal BO to GL transaction
071 String transactionPropertyName = propertyName;
072
073 Map propertyMappingTable = getPropertyMappingTable();
074 transactionPropertyName = convertPropertyName(propertyMappingTable, propertyName);
075
076 // create a new entry for current property
077 transactionFieldValues.put(transactionPropertyName, propertyValue);
078 }
079 return transactionFieldValues;
080 }
081
082 /**
083 * This method converts the property name of a normal business object to GL transaction
084 *
085 * @param propertyName the property name of a normal business object
086 * @return the property name of GL transaction
087 */
088 public static String convertToTransactionPropertyName(String propertyName) {
089 return convertPropertyName(getPropertyMappingTable(), propertyName);
090 }
091
092 /**
093 * This method converts the property name of a normal business object from GL transaction
094 *
095 * @param propertyName the property name of GL transaction
096 * @return the property name of a normal business object
097 */
098 public static String convertFromTransactionPropertyName(String propertyName) {
099 return convertPropertyName(getSwappedPropertyMappingTable(), propertyName);
100 }
101
102 /**
103 * This method converts the field values from GL transaction to normal GL business objects
104 *
105 * @param fieldValues the map of field values for GL transaction
106 * @return the map of field values for normal GL business objects
107 */
108 public static Map convertFromTransactionFieldValues(Map fieldValues) {
109 Map boFieldValues = new HashMap();
110
111 Iterator propsIter = fieldValues.keySet().iterator();
112 while (propsIter.hasNext()) {
113 String propertyName = (String) propsIter.next();
114 String propertyValue = (String) fieldValues.get(propertyName);
115
116 // convert property name from normal BO to GL transaction
117 String transactionPropertyName = propertyName;
118 Map propertyMappingTable = getSwappedPropertyMappingTable();
119 transactionPropertyName = convertPropertyName(propertyMappingTable, propertyName);
120
121 // create a new entry for current property
122 boFieldValues.put(transactionPropertyName, propertyValue);
123 }
124 return boFieldValues;
125 }
126
127 /**
128 * This method defines a table that maps normal properties into transaction properties
129 *
130 * @return a property mapping table
131 */
132 private static Map getPropertyMappingTable() {
133 Map propertyMappingTable = new HashMap();
134
135 propertyMappingTable.put(KFSPropertyConstants.OBJECT_CODE, KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
136 propertyMappingTable.put(KFSPropertyConstants.SUB_OBJECT_CODE, KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
137 propertyMappingTable.put(KFSPropertyConstants.OBJECT_TYPE_CODE, KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE);
138
139 propertyMappingTable.put(KFSPropertyConstants.BALANCE_TYPE_CODE, KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE);
140 propertyMappingTable.put(KFSPropertyConstants.ENCUMBRANCE_DOCUMENT_TYPE_CODE, KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE);
141 propertyMappingTable.put(KFSPropertyConstants.ORIGIN_CODE, KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE);
142 propertyMappingTable.put(KFSPropertyConstants.DOCUMENT_NUMBER, KFSPropertyConstants.DOCUMENT_NUMBER);
143
144 return propertyMappingTable;
145 }
146
147 /**
148 * This method defines a table that maps transaction properties into normal properties
149 *
150 * @return a property mapping table
151 */
152 private static Map getSwappedPropertyMappingTable() {
153 Map propertyMappingTable = getPropertyMappingTable();
154 Map swappedPropertyMappingTable = new HashMap();
155
156 Iterator iterator = propertyMappingTable.keySet().iterator();
157 while (iterator.hasNext()) {
158 String propertyKey = (String) iterator.next();
159 String propertyValue = (String) propertyMappingTable.get(propertyKey);
160
161 if (propertyValue != null && !swappedPropertyMappingTable.containsKey(propertyValue)) {
162 swappedPropertyMappingTable.put(propertyValue, propertyKey);
163 }
164 }
165 return swappedPropertyMappingTable;
166 }
167
168 /**
169 * This method retrieves a name of the given property name from the given mapping table
170 *
171 * @param propertyMappingTable the property mapping table
172 * @param propertyName the property name of a normal business object
173 * @return the property name of GL transaction
174 */
175 private static String convertPropertyName(Map propertyMappingTable, String propertyName) {
176
177 String transactionPropertyName = propertyName;
178 if (propertyMappingTable.containsKey(propertyName)) {
179 transactionPropertyName = (String) propertyMappingTable.get(propertyName);
180 }
181 return transactionPropertyName;
182 }
183
184 /**
185 * Escapes any special characters in map name/property values
186 *
187 * @param fieldValues map of field keys and their values
188 * @param specialCharacter special characters to replace
189 * @param replacement value to replace special characters with
190 */
191 public static void escapeSpecialCharacter(Map fieldValues, String specialCharacter, String replacement) {
192 Iterator propsIter = fieldValues.keySet().iterator();
193 while (propsIter.hasNext()) {
194 String propertyName = (String) propsIter.next();
195 String propertyValue = (String) fieldValues.get(propertyName);
196
197 String propertyValueAfterEscaped = propertyValue.replaceAll(specialCharacter, replacement);
198 fieldValues.put(propertyName, propertyValueAfterEscaped);
199 }
200 }
201
202 /**
203 * Escapes any single quotes in map name/property values
204 * @param fieldValues
205 */
206 public static void escapeSingleQuote(Map fieldValues) {
207 String specialCharacter = "'";
208 String replacement = " ";
209 escapeSpecialCharacter(fieldValues, specialCharacter, replacement);
210 }
211 }