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.sys.document.web.struts; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 import java.util.Set; 021 022 import org.apache.commons.lang.StringUtils; 023 import org.kuali.kfs.sys.KFSConstants; 024 import org.kuali.kfs.sys.businessobject.FinancialSystemDocumentHeader; 025 import org.kuali.kfs.sys.context.SpringContext; 026 import org.kuali.rice.kns.service.DocumentHelperService; 027 import org.kuali.rice.kns.service.KualiConfigurationService; 028 import org.kuali.rice.kns.util.GlobalVariables; 029 import org.kuali.rice.kns.util.KNSConstants; 030 import org.kuali.rice.kns.web.struts.form.KualiTransactionalDocumentFormBase; 031 import org.kuali.rice.kns.web.ui.ExtraButton; 032 import org.kuali.rice.kns.web.ui.HeaderField; 033 import org.kuali.rice.kns.workflow.service.KualiWorkflowDocument; 034 035 /** 036 * This class is a Financial System specific transactional document form base 037 */ 038 public class FinancialSystemTransactionalDocumentFormBase extends KualiTransactionalDocumentFormBase { 039 040 /** 041 * Constructs a FinancialSystemTransactionalDocumentFormBase.java. 042 */ 043 public FinancialSystemTransactionalDocumentFormBase() { 044 super(); 045 } 046 047 /** 048 * @see org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase#populateHeaderFields(org.kuali.rice.kns.workflow.service.KualiWorkflowDocument) 049 */ 050 @Override 051 public void populateHeaderFields(KualiWorkflowDocument workflowDocument) { 052 super.populateHeaderFields(workflowDocument); 053 if (getDocument().getDocumentHeader() instanceof FinancialSystemDocumentHeader) { 054 FinancialSystemDocumentHeader documentHeader = (FinancialSystemDocumentHeader)getDocument().getDocumentHeader(); 055 if (StringUtils.isNotBlank(documentHeader.getFinancialDocumentInErrorNumber())) { 056 extendDocInfoToThreeColumns(); 057 int insertIndex = 2; 058 getDocInfo().remove(insertIndex); 059 getDocInfo().add(insertIndex, new HeaderField("DataDictionary.FinancialSystemDocumentHeader.attributes.financialDocumentInErrorNumber", 060 documentHeader.getFinancialDocumentInErrorNumber(), buildHtmlLink(getDocumentHandlerUrl(documentHeader.getFinancialDocumentInErrorNumber()), documentHeader.getFinancialDocumentInErrorNumber()))); 061 } 062 if (StringUtils.isNotBlank(documentHeader.getCorrectedByDocumentId())) { 063 extendDocInfoToThreeColumns(); 064 int insertIndex = getNumColumns() + 2; 065 getDocInfo().remove(insertIndex); 066 getDocInfo().add(insertIndex, new HeaderField("DataDictionary.FinancialSystemDocumentHeader.attributes.correctedByDocumentId", 067 documentHeader.getCorrectedByDocumentId(), buildHtmlLink(getDocumentHandlerUrl(documentHeader.getCorrectedByDocumentId()), documentHeader.getCorrectedByDocumentId()))); 068 069 070 } 071 } 072 } 073 074 /** 075 * Extends the DocInfo on the form to 3 columns if it currently has less than 3 columns. 076 * If it has exactly 3 or more columns, no action will be taken. 077 */ 078 protected void extendDocInfoToThreeColumns() { 079 List<HeaderField> newDocInfo = new ArrayList<HeaderField>(); 080 int currentColumns = getNumColumns(); 081 int targetColumns = 3; 082 if (getNumColumns() < targetColumns) { 083 int column = 0; 084 for (HeaderField headerField : getDocInfo()) { 085 if (column + 1 > currentColumns) { 086 newDocInfo.add(HeaderField.EMPTY_FIELD); 087 column = (column + 1) % targetColumns; 088 } 089 newDocInfo.add(headerField); 090 column = (column + 1) % targetColumns; 091 } 092 // fill out the final row with empty columns 093 while (newDocInfo.size() % targetColumns != 0) { 094 newDocInfo.add(HeaderField.EMPTY_FIELD); 095 } 096 setDocInfo(newDocInfo); 097 setNumColumns(3); 098 } 099 } 100 101 /** 102 * @see org.kuali.rice.kns.web.struts.form.KualiForm#getExtraButtons() 103 */ 104 @Override 105 public List<ExtraButton> getExtraButtons() { 106 List<ExtraButton> buttons = super.getExtraButtons(); 107 if (getDocumentActions().containsKey(KFSConstants.KFS_ACTION_CAN_ERROR_CORRECT)) { 108 buttons.add(generateErrorCorrectionButton()); 109 } 110 return buttons; 111 } 112 113 private ExtraButton errorCorrectionButton; 114 115 /** 116 * Generates an ExtraButton which represents the error correction button 117 * 118 * @return an ExtraButton representing an ErrorCorrection button 119 */ 120 protected ExtraButton generateErrorCorrectionButton() { 121 if ( errorCorrectionButton == null ) { 122 ExtraButton button = new ExtraButton(); 123 button.setExtraButtonAltText("Create error correction document from current document"); 124 button.setExtraButtonProperty("methodToCall.correct"); 125 button.setExtraButtonSource(SpringContext.getBean(KualiConfigurationService.class).getPropertyString("kr.externalizable.images.url")+"buttonsmall_errcorr.gif"); 126 errorCorrectionButton = button; 127 } 128 return errorCorrectionButton; 129 } 130 }