From 1d6bf5fc7e3b42058e1cb24c2f27d18506861db0 Mon Sep 17 00:00:00 2001 From: Peter Brown Date: Mon, 1 Feb 2016 12:43:21 -0500 Subject: [PATCH 1/3] Adding TransactionType FilteredValuesFinder, controlled by new Rice parameter --- ...ypeBusinessObjectFilteredValuesFinder.java | 126 ++++++++++++++++++ .../org/kuali/kra/datadictionary/Award.xml | 2 +- 2 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java diff --git a/coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java b/coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java new file mode 100644 index 00000000000..d7a6b6fcabe --- /dev/null +++ b/coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java @@ -0,0 +1,126 @@ +package org.kuali.kra.award.lookup.keyvalue; + +import java.util.*; + +import jdk.internal.org.objectweb.asm.tree.analysis.Value; +import org.apache.commons.lang.StringUtils; +import org.kuali.kra.award.home.ValidRates; +import org.kuali.kra.infrastructure.Constants; +import org.kuali.coeus.sys.framework.keyvalue.PrefixValuesFinder; +import org.kuali.kra.timeandmoney.transactions.AwardTransactionType; +import org.kuali.rice.core.api.util.ConcreteKeyValue; +import org.kuali.rice.core.api.util.KeyValue; +import org.kuali.rice.coreservice.framework.CoreFrameworkServiceLocator; +import org.kuali.rice.coreservice.framework.parameter.ParameterService; +import org.kuali.rice.krad.keyvalues.PersistableBusinessObjectValuesFinder; +import org.kuali.rice.krad.service.BusinessObjectService; + +public class AwardTransactionTypeBusinessObjectFilteredValuesFinder extends PersistableBusinessObjectValuesFinder { + + private static final String SYSTEM_PARAMETER_NAME = "AwardTransactionTypeAllowedValues"; + private static final String SYSTEM_PARAMETER_CMPNT_CODE = "Document"; + public static final String TRANSACTION_TYPE_CODE = "awardTransactionTypeCode"; + BusinessObjectService businessObjectService; + + class PBOComparator implements Comparator + { + public int compare(Object kv1, Object kv2 ) + { + try + { + String desc1 = ((KeyValue)kv1).getValue(); + String desc2 = ((KeyValue)kv2).getValue(); + if (desc1 == null) + { + desc1 = ""; + } + if (desc2 == null) + { + desc2 = ""; + } + return desc1.compareTo(desc2); + } + catch (Exception e) + { + return 0; + } + } + + } + /** + * Build the list of KeyValues using the key (keyAttributeName) and + * label (labelAttributeName) of the list of all business objects found + * for the BO class specified along with a "select" entry. + * + * {@inheritDoc} + */ + @Override + public List getKeyValues(){ + List labels; + + labels = super.getKeyValues(); + Collections.sort(labels, new PBOComparator()); + labels.add(0, new ConcreteKeyValue(PrefixValuesFinder.getPrefixKey(), PrefixValuesFinder.getDefaultPrefixValue())); + + ParameterService parameterService = CoreFrameworkServiceLocator.getParameterService(); + // "AwardTransactionTypeAllowedValues" is the value of "parm_nm" column in table "krcr_parm_t" + Collection transactionValues = parameterService.getParameterValuesAsString(Constants.MODULE_NAMESPACE_AWARD, SYSTEM_PARAMETER_CMPNT_CODE, SYSTEM_PARAMETER_NAME); + + // In case the above system parameter is not defined under table "krcr_parm_t" + // Let's return the full list of Award Transaction Types + if (transactionValues == null || transactionValues.size() == 0) { + return labels; + } + + // Otherwise - System parameter has been defined + List filteredLabels = new ArrayList(); + KeyValue [] labelsArray = labels.toArray(new KeyValue[labels.size()]); + Iterator iter = transactionValues.iterator(); + + // ValidAwardBasisPayment vBasisPayment = (ValidAwardBasisPayment)businessObjectService.findByPrimaryKey(ValidAwardBasisPayment.class, Collections.singletonMap(VALIDAWARDBASISPAYMENT_ID, validAwardBasisPaymentId)); + + while (iter.hasNext()) { + String filteredTransactionType = (String) iter.next(); + Map qMap = new HashMap<>(); + qMap.put(TRANSACTION_TYPE_CODE, filteredTransactionType); + AwardTransactionType awardTransactionType = (AwardTransactionType)businessObjectService.findByPrimaryKey(AwardTransactionType.class,qMap ); + for (int i = 0; i < labelsArray.length; i++) { + + if (!StringUtils.isBlank(labelsArray[i].getValue()) && !StringUtils.isBlank(filteredTransactionType)) { + if (awardTransactionType.getDescription().equalsIgnoreCase(labelsArray[i].getValue())) { + + // The same index (key) should be used for the filtered list. + // Otherwise the value of the transaction type cannot be displayed for + // readOnlyAlternateDisplay mode when opening the award page + filteredLabels.add(new ConcreteKeyValue(labelsArray[i].getKey(), labelsArray[i].getValue())); + } + } + // If any transaction type defined in table "krcr_parm_t" is not in the original drop down list + // Then we won't add it into the filtered list. + } + } + + Collections.sort(filteredLabels, new PBOComparator()); + // We need "select" on the top of the drop down list as well + filteredLabels.add(0, new ConcreteKeyValue(PrefixValuesFinder.getPrefixKey(), PrefixValuesFinder.getDefaultPrefixValue())); + + return filteredLabels; + } + + /** + * Gets the businessObjectService attribute. + * @return Returns the businessObjectService. + */ + protected BusinessObjectService getBusinessObjectService() { + return businessObjectService; + } + + + /** + * Sets the businessObjectService attribute value. + * @param businessObjectService The businessObjectService to set. + */ + public void setBusinessObjectService(BusinessObjectService businessObjectService) { + this.businessObjectService = businessObjectService; + } +} diff --git a/coeus-impl/src/main/resources/org/kuali/kra/datadictionary/Award.xml b/coeus-impl/src/main/resources/org/kuali/kra/datadictionary/Award.xml index 4b7705d44a6..56f47e8cab2 100644 --- a/coeus-impl/src/main/resources/org/kuali/kra/datadictionary/Award.xml +++ b/coeus-impl/src/main/resources/org/kuali/kra/datadictionary/Award.xml @@ -1170,7 +1170,7 @@ From fbdff5a61c24801c044a8df9df7bdb7f5f9bf905 Mon Sep 17 00:00:00 2001 From: Peter Brown Date: Mon, 1 Feb 2016 14:37:20 -0500 Subject: [PATCH 2/3] Fixed bugs related to using the keys rather than the values for the Award Transaction Types --- ...nsactionTypeBusinessObjectFilteredValuesFinder.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java b/coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java index d7a6b6fcabe..45ef99728e4 100644 --- a/coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java +++ b/coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java @@ -2,7 +2,6 @@ import java.util.*; -import jdk.internal.org.objectweb.asm.tree.analysis.Value; import org.apache.commons.lang.StringUtils; import org.kuali.kra.award.home.ValidRates; import org.kuali.kra.infrastructure.Constants; @@ -77,17 +76,12 @@ public List getKeyValues(){ KeyValue [] labelsArray = labels.toArray(new KeyValue[labels.size()]); Iterator iter = transactionValues.iterator(); - // ValidAwardBasisPayment vBasisPayment = (ValidAwardBasisPayment)businessObjectService.findByPrimaryKey(ValidAwardBasisPayment.class, Collections.singletonMap(VALIDAWARDBASISPAYMENT_ID, validAwardBasisPaymentId)); - while (iter.hasNext()) { String filteredTransactionType = (String) iter.next(); - Map qMap = new HashMap<>(); - qMap.put(TRANSACTION_TYPE_CODE, filteredTransactionType); - AwardTransactionType awardTransactionType = (AwardTransactionType)businessObjectService.findByPrimaryKey(AwardTransactionType.class,qMap ); for (int i = 0; i < labelsArray.length; i++) { - if (!StringUtils.isBlank(labelsArray[i].getValue()) && !StringUtils.isBlank(filteredTransactionType)) { - if (awardTransactionType.getDescription().equalsIgnoreCase(labelsArray[i].getValue())) { + if (!StringUtils.isBlank(labelsArray[i].getKey()) && !StringUtils.isBlank(filteredTransactionType)) { + if (StringUtils.equals(filteredTransactionType,labelsArray[i].getKey())) { // The same index (key) should be used for the filtered list. // Otherwise the value of the transaction type cannot be displayed for From b5c0cca85e16087be7fed83fdf58d4c9775bc417 Mon Sep 17 00:00:00 2001 From: Peter Brown Date: Tue, 2 Feb 2016 09:54:28 -0500 Subject: [PATCH 3/3] [RESSUP-1416] Adding sql for new rice parameter. Parameter value is empty by accepts a list of Award Transaction Type Codes --- .../sql/oracle/rice/bootstrap/V1602_001_RESSUP-1416.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 coeus-db/coeus-db-sql/src/main/resources/co/kuali/coeus/data/migration/sql/oracle/rice/bootstrap/V1602_001_RESSUP-1416.sql diff --git a/coeus-db/coeus-db-sql/src/main/resources/co/kuali/coeus/data/migration/sql/oracle/rice/bootstrap/V1602_001_RESSUP-1416.sql b/coeus-db/coeus-db-sql/src/main/resources/co/kuali/coeus/data/migration/sql/oracle/rice/bootstrap/V1602_001_RESSUP-1416.sql new file mode 100644 index 00000000000..6e830d4f25d --- /dev/null +++ b/coeus-db/coeus-db-sql/src/main/resources/co/kuali/coeus/data/migration/sql/oracle/rice/bootstrap/V1602_001_RESSUP-1416.sql @@ -0,0 +1,3 @@ +INSERT INTO krcr_parm_t (nmspc_cd, cmpnt_cd, parm_nm, obj_id, ver_nbr, parm_typ_cd, val, parm_desc_txt, eval_oprtr_cd, appl_id) + VALUES ('KC-AWARD', 'Document', 'AwardTransactionTypeAllowedValues', sys_guid(), 1, 'CONFG', '', 'Parameter defining allowed Award Transaction Types in Award drop down', 'A', 'KC'); + \ No newline at end of file