/*
* 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.tem.document.service.impl;
import org.kuali.kfs.module.tem.businessobject.AgencyEntryFull;
import org.kuali.kfs.module.tem.document.TemCorrectionProcessDocument;
import org.kuali.kfs.module.tem.document.service.TemCorrectionDocumentService;
import org.kuali.kfs.module.tem.document.web.struts.TemCorrectionForm;
import org.kuali.rice.kns.web.ui.Column;
import org.kuali.rice.krad.comparator.NumericValueComparator;
import org.kuali.rice.krad.comparator.StringValueComparator;
import org.kuali.rice.krad.comparator.TemporalValueComparator;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TemCorrectionDocumentServiceImpl implements TemCorrectionDocumentService {
private List<Column> cachedColumns = null;
protected String batchFileDirectoryName;
/**
* Returns metadata to help render columns in the TMCP. Do not modify this list or the contents in this list.
*
* @param docId the document id of a GLCP document
* @return a List of Columns to render
* @see org.kuali.kfs.gl.document.service.CorrectionDocumentService#getTableRenderColumnMetadata(java.lang.String)
*/
@Override
public List<Column> getTableRenderColumnMetadata(String docId) {
synchronized (this) {
if (cachedColumns == null) {
cachedColumns = new ArrayList<Column>();
Column columnToAdd;
columnToAdd = new Column();
columnToAdd.setColumnTitle("Agency Code");
columnToAdd.setPropertyName("creditCardOrAgencyCode");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Agency");
columnToAdd.setPropertyName("agency");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Merchant Name");
columnToAdd.setPropertyName("merchantName");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Trip Invoice #");
columnToAdd.setPropertyName("tripInvoiceNumber");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Traveler Name");
columnToAdd.setPropertyName("travelerName");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Traveler ID");
columnToAdd.setPropertyName("travelerId");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Expense Amount");
columnToAdd.setPropertyName("tripExpenseAmount");
columnToAdd.setValueComparator(NumericValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Arranger Name");
columnToAdd.setPropertyName("tripArrangerName");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Departure Date");
columnToAdd.setPropertyName("tripDepartureDate");
columnToAdd.setValueComparator(TemporalValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Air Book Date");
columnToAdd.setPropertyName("airBookDate");
columnToAdd.setValueComparator(TemporalValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Air Carrier Code");
columnToAdd.setPropertyName("airCarrierCode");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Air Ticket Number");
columnToAdd.setPropertyName("airTicketNumber");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("PNR Number");
columnToAdd.setPropertyName("pnrNumber");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Unique Id");
columnToAdd.setPropertyName("transactionUniqueId");
columnToAdd.setValueComparator(StringValueComparator.getInstance());
cachedColumns.add(columnToAdd);
columnToAdd = new Column();
columnToAdd.setColumnTitle("Posting Date");
columnToAdd.setPropertyName("transactionPostingDate");
columnToAdd.setValueComparator(TemporalValueComparator.getInstance());
cachedColumns.add(columnToAdd);
cachedColumns = Collections.unmodifiableList(cachedColumns);
}
}
return cachedColumns;
}
@Override
public void persistAgencyEntryGroupsForDocumentSave(TemCorrectionProcessDocument document, TemCorrectionForm correctionForm) {
FileWriter out;
try {
out = new FileWriter(this.getBatchFileDirectoryName() + File.separator + correctionForm.getInputGroupId());
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = xmlOutputFactory.createXMLStreamWriter(out);
writer.writeStartDocument();
writer.writeStartElement("agencyData");
for (AgencyEntryFull agency: correctionForm.getAllEntries()) {
writer.writeStartElement("record");
writer.writeStartElement("creditCardOrAgencyCode"); writer.writeCharacters(agency.getCreditCardOrAgencyCode()); writer.writeEndElement();
writer.writeStartElement("agency"); writer.writeCharacters(agency.getAgency()); writer.writeEndElement();
writer.writeStartElement("agencyFileName"); writer.writeCharacters(agency.getAgencyFileName()); writer.writeEndElement();
writer.writeStartElement("merchantName"); writer.writeCharacters(agency.getMerchantName()); writer.writeEndElement();
writer.writeStartElement("tripInvoiceNumber"); writer.writeCharacters(agency.getTripInvoiceNumber()); writer.writeEndElement();
writer.writeStartElement("travelerName"); writer.writeCharacters(agency.getTravelerName()); writer.writeEndElement();
writer.writeStartElement("travelerId"); writer.writeCharacters(agency.getTravelerId()); writer.writeEndElement();
writer.writeStartElement("tripExpenseAmount"); writer.writeCharacters(agency.getTripExpenseAmount().toString()); writer.writeEndElement();
writer.writeStartElement("tripArrangerName"); writer.writeCharacters(agency.getTripArrangerName()); writer.writeEndElement();
writer.writeStartElement("tripDepartureDate"); writer.writeCharacters(agency.getTripDepartureDate().toString()); writer.writeEndElement();
writer.writeStartElement("airBookDate"); writer.writeCharacters(agency.getAirBookDate().toString()); writer.writeEndElement();
writer.writeStartElement("airCarrierCode"); writer.writeCharacters(agency.getAirCarrierCode()); writer.writeEndElement();
writer.writeStartElement("airTicketNumber"); writer.writeCharacters(agency.getAirTicketNumber()); writer.writeEndElement();
writer.writeStartElement("pnrNumber"); writer.writeCharacters(agency.getPnrNumber()); writer.writeEndElement();
writer.writeStartElement("transactionUniqueId"); writer.writeCharacters(agency.getTransactionUniqueId()); writer.writeEndElement();
writer.writeStartElement("transactionPostingDate"); writer.writeCharacters(agency.getTransactionPostingDate().toString()); writer.writeEndElement();
writer.writeEndElement(); // end the record element
}
writer.writeEndElement();
writer.writeEndDocument();
writer.close();
out.close();
}
catch (IOException ioe) {
throw new RuntimeException("Could not write XML for agency groups", ioe);
}
catch (XMLStreamException xmlse) {
throw new RuntimeException("Could not write XML for agency groups", xmlse);
}
}
@Override
public String getBatchFileDirectoryName() {
return this.batchFileDirectoryName;
}
/**
* Sets the batchFileDirectoryName attribute value.
* @param batchFileDirectoryName The batchFileDirectoryName to set.
*/
public void setBatchFileDirectoryName(String batchFileDirectoryName) {
this.batchFileDirectoryName = batchFileDirectoryName;
}
}