/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.gl.businessobject.options; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.gl.businessobject.OriginEntryFull; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.core.api.util.ConcreteKeyValue; import org.kuali.rice.core.api.util.KeyValue; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.kns.service.DataDictionaryService; import org.kuali.rice.krad.keyvalues.KeyValuesBase; /** * An extension of KeyValuesBase that */ public class OriginEntryFieldFinder extends KeyValuesBase { /** * Returns a list of all field names and display field names for the Origin Entry class * @return a List of key/value pair options * @see org.kuali.rice.kns.lookup.keyvalues.KeyValuesFinder#getKeyValues() */ public List getKeyValues() { List activeLabels = new ArrayList(); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, "Fiscal Year")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, "Chart Code")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.ACCOUNT_NUMBER, "Account Number")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, "Sub-Account Number")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, "Object Code")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, "Sub-Object Code")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, "Balance Type")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE, "Object Type")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.UNIVERSITY_FISCAL_PERIOD_CODE, "Fiscal Period")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE, "Document Type")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE, "Origin code")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.DOCUMENT_NUMBER, "Document Number")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER, "Sequence Number")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC, "Description")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT, "Amount")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE, "Debit Credit Indicator")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.TRANSACTION_DATE, "Transaction Date")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.ORGANIZATION_DOCUMENT_NUMBER, "Org Doc Number")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.PROJECT_CODE, "Project Code")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID, "Org Ref ID")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.REFERENCE_FIN_DOCUMENT_TYPE_CODE, "Ref Doc Type")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.FIN_SYSTEM_REF_ORIGINATION_CODE, "Ref Origin code")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.FINANCIAL_DOCUMENT_REFERENCE_NBR, "Ref Doc Number")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.FINANCIAL_DOCUMENT_REVERSAL_DATE, "Reversal Date")); activeLabels.add(new ConcreteKeyValue(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD, "Enc Update Code")); return activeLabels; } /** * Given the property field name for a field, returns the display name * * @param fieldName the property field name for a field * @return the display field name of that field */ public String getFieldDisplayName(String fieldName) { for (Iterator iter = getKeyValues().iterator(); iter.hasNext();) { KeyValue klp = (KeyValue) iter.next(); if (klp.getKey().equals(fieldName)) { return klp.getValue(); } } return "Error"; } /** * Given the display name of a field, returns the property field name * * @param fieldDisplayName the display name of the field * @return the property field name for that field */ public String getFieldName(String fieldDisplayName) { for (Iterator iter = getKeyValues().iterator(); iter.hasNext();) { KeyValue klp = (KeyValue) iter.next(); if (klp.getValue().equals(fieldDisplayName)) { return (String) klp.getKey(); } } return "Error"; } /** * Given a field name and a value, determines if that value is valid for the field * * @param fieldName the name of a field to inquire on * @param value the value that the field will potentially be set to * @return true if the value is valid, false if otherwise */ public boolean isValidValue(String fieldName, String value) { if (StringUtils.isBlank(fieldName)) { return false; } String fieldType = getFieldType(fieldName); int fieldLength = getFieldLength(fieldName); if (allowNull(fieldName) && (value == null || value.length() == 0)) { return true; } if (!allowNull(fieldName) && (value == null || value.length() == 0)) { return false; } if (value.length() > fieldLength) { return false; } if ("KualiDecimal".equals(fieldType)) { try { KualiDecimal d = new KualiDecimal(value); return true; } catch (NumberFormatException nfe) { return false; } } else if ("Integer".equals(fieldType)) { try { Integer d = new Integer(value); return true; } catch (NumberFormatException nfe) { return false; } } else if ("Date".equals(fieldType)) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try { Date d = df.parse(value); return true; } catch (ParseException e) { return false; } } return true; } /** * Returns a String with the name of the type of the given field * * @param fieldName the name of the field to inquire on * @return a String with the name of the class that field returns */ public String getFieldType(String fieldName) { if (fieldName.equals(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR)) { return "Integer"; } if (fieldName.equals(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER)) { return "Integer"; } if (fieldName.equals(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT)) { return "KualiDecimal"; } if (fieldName.equals(KFSPropertyConstants.TRANSACTION_DATE)) { return "Date"; } if (fieldName.equals(KFSPropertyConstants.FINANCIAL_DOCUMENT_REVERSAL_DATE)) { return "Date"; } return "String"; } /** * Returns whether the given field can be set to null or not * * @param fieldName the name of the field to inquire about * @return true if it can be set to null, false otherwise */ public boolean allowNull(String fieldName) { if (fieldName.equals(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT)) { return false; } return true; } /** * Returns the length of a given field in Origin Entry * * @param fieldName the name of the Origin Entry field to get a length for * @return the length of the field */ public int getFieldLength(String fieldName) { DataDictionaryService dataDictionaryService = SpringContext.getBean(DataDictionaryService.class); int fieldLength = 0; fieldLength = dataDictionaryService.getAttributeMaxLength(OriginEntryFull.class, fieldName); return fieldLength; } }