/*
* 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.module.cam.fixture;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.kuali.kfs.coa.businessobject.Account;
import org.kuali.kfs.coa.service.AccountService;
import org.kuali.kfs.module.cam.businessobject.Asset;
import org.kuali.kfs.module.cam.businessobject.AssetPayment;
import org.kuali.kfs.module.cam.businessobject.AssetRetirementGlobal;
import org.kuali.kfs.module.cam.businessobject.AssetRetirementGlobalDetail;
import org.kuali.kfs.sys.context.SpringContext;
public enum AssetRetirementGlobalMaintainableFixture {
RETIREMENT1(1);
private int testDataPos;
private static Properties properties;
private static final AccountService acctService;
static {
String propertiesFileName = "org/kuali/kfs/module/cam/document/service/asset_retirement.properties";
properties = new Properties();
try {
properties.load(AssetRetirementGlobalMaintainableFixture.class.getClassLoader().getResourceAsStream(propertiesFileName));
}
catch (IOException e) {
throw new RuntimeException();
}
acctService = SpringContext.getBean(AccountService.class);
}
private AssetRetirementGlobalMaintainableFixture(int dataPos) {
this.testDataPos = dataPos;
}
@SuppressWarnings("deprecation")
public AssetRetirementGlobal newAssetRetirement() {
String propertyKey = "assetRetirement.testData" + testDataPos;
String deliminator = properties.getProperty("deliminator");
String fieldNames = properties.getProperty("assetRetirement.fieldNames");
AssetRetirementGlobal assetRetirementGlobal = CamsFixture.DATA_POPULATOR.buildTestDataObject(AssetRetirementGlobal.class, properties, propertyKey, fieldNames, deliminator);
List<AssetRetirementGlobalDetail> assetRetirementGlobalDetail = newAssetRetirementDetail();
assetRetirementGlobal.setAssetRetirementGlobalDetails(assetRetirementGlobalDetail);
return assetRetirementGlobal;
}
@SuppressWarnings("deprecation")
private List<AssetRetirementGlobalDetail> newAssetRetirementDetail() {
List<AssetRetirementGlobalDetail> assetRetirementGlobalDetails = new ArrayList<AssetRetirementGlobalDetail>();
List<Asset> assets = newAssets();
for (Asset asset : assets) {
AssetRetirementGlobalDetail assetRetirementDetail = new AssetRetirementGlobalDetail();
assetRetirementDetail.setAsset(asset);
assetRetirementGlobalDetails.add(assetRetirementDetail);
}
return assetRetirementGlobalDetails;
}
@SuppressWarnings("deprecation")
private List<Asset> newAssets() {
List<Asset> assets = new ArrayList<Asset>();
String deliminator = properties.getProperty("deliminator");
String fieldNames = properties.getProperty("asset.fieldNames");
Integer dataRows = new Integer(properties.getProperty("asset.numOfData"));
testDataPos=1;
for (int i=1; i<= dataRows.intValue(); i++) {
String propertyKey = "asset.testData" +i;
Asset asset = CamsFixture.DATA_POPULATOR.buildTestDataObject(Asset.class, properties, propertyKey, fieldNames, deliminator);
List<AssetPayment> assetPayments = newAssetPayments();
asset.setAssetPayments(assetPayments);
for (AssetPayment assetPayment : assetPayments) {
assetPayment.setAsset(asset);
}
assets.add(asset);
testDataPos += 2;
}
return assets;
}
private List<AssetPayment> newAssetPayments() {
List<AssetPayment> assetPayments = new ArrayList<AssetPayment>();
String deliminator = properties.getProperty("deliminator");
String fieldNames = properties.getProperty("assetPayment.fieldNames");
Integer dataRows = new Integer(properties.getProperty("assetPayment.numOfData"));
for (int i=testDataPos;i<=dataRows.intValue() && i<testDataPos+2;i++) {
String propertyKey = "assetPayment.testData" + i;
AssetPayment assetPayment = CamsFixture.DATA_POPULATOR.buildTestDataObject(AssetPayment.class, properties, propertyKey, fieldNames, deliminator);
/*part of the Asset Retirement Service depends on an Account being present in the AssetPayment*/
String[] data = properties.getProperty(propertyKey).split(",");
String[] fields = fieldNames.split(",");
String coa = null;
String acctnum = null;
boolean gotit = false;
for (int j = 0; j < fields.length; ++j){
if ("accountnumber".equalsIgnoreCase(fields[j])) {
acctnum = data[j];
} else if ("chartofaccountscode".equalsIgnoreCase(fields[j])) {
coa = data[j];
}
if (acctnum != null && coa != null){
Account act = acctService.getByPrimaryId(coa, acctnum);
assetPayment.setAccount(act);
gotit = true;
break;
}
}
if (!gotit) {
throw new RuntimeException("Unable to find account number of asset payment.");
}
assetPayments.add(assetPayment);
}
return assetPayments;
}
}