/**
* Copyright 2010 The University of North Carolina at Chapel Hill
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cdr.forms;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import crosswalk.EmailInputField;
import crosswalk.Form;
import crosswalk.FormElement;
import crosswalk.MajorBlock;
import crosswalk.MajorEntry;
public class Deposit {
private Form form;
private String formId;
private String receiptEmailAddress;
private DepositFile mainFile;
private DepositFile[] supplementalFiles;
private List<DepositElement> elements;
private List<SupplementalObject> supplementalObjects;
private Date agreementDate;
private DepositFile agreementFile;
private static final Logger LOG = LoggerFactory
.getLogger(Deposit.class);
public Form getForm() {
return form;
}
public void setForm(Form form) {
this.form = form;
}
public String getFormId() {
return formId;
}
public void setFormId(String formId) {
this.formId = formId;
}
public String getReceiptEmailAddress() {
return receiptEmailAddress;
}
public void setReceiptEmailAddress(String receiptEmailAddress) {
this.receiptEmailAddress = receiptEmailAddress;
}
public Date getAgreementDate() {
return agreementDate;
}
public void setAgreementDate(Date agreementDate) {
this.agreementDate = agreementDate;
}
public Boolean getAgreement() {
return agreementDate != null;
}
public void setAgreement(Boolean agreement) {
if (agreement) {
this.agreementDate = new Date();
} else {
this.agreementDate = null;
}
}
public void setAgreementFile(DepositFile agreementFile) {
this.agreementFile = agreementFile;
}
public DepositFile getAgreementFile() {
if (agreementFile == null && getAgreement() && form.getAgreement() != null) {
try {
File agreementFileText = File.createTempFile("agreement", null);
String agreementText = form.getAgreement();
SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy");
String agreementDate = DATE_FORMAT.format(this.getAgreementDate());
PrintWriter fileText = new PrintWriter(agreementFileText);
fileText.println(agreementText);
fileText.println(agreementDate);
fileText.println(form.getCurrentUser());
fileText.close();
agreementFile = new DepositFile();
agreementFile.setFile(agreementFileText);
agreementFile.setContentType("text/plain");
agreementFile.setFilename("agreement.txt");
agreementFile.setSize(agreementFileText.length());
agreementFile.setExternal(false);
} catch (IOException e) {
LOG.error("Couldn't add agreement file", e);
agreementFile = null;
}
}
return agreementFile;
}
public List<String> getAllDepositNoticeToEmailAddresses() {
ArrayList<String> addresses = new ArrayList<String>();
if (this.getForm().getEmailDepositNoticeTo() != null)
addresses.addAll(this.getForm().getEmailDepositNoticeTo());
for (FormElement element : this.getForm().getElements()) {
if (element instanceof MajorBlock) {
MajorEntry major = ((MajorBlock) element).getSelectedMajor();
if (major != null && major.getEmailDepositNoticeTo() != null) {
addresses.addAll(major.getEmailDepositNoticeTo());
}
}
}
for (DepositElement element : this.getElements()) {
for (DepositEntry entry : element.getEntries()) {
if (entry.getFields() != null) {
for (DepositField<?> field : entry.getFields()) {
if (field instanceof EmailDepositField && ((EmailInputField) field.getFormInputField()).isProvidesEmailDepositNoticeTo()) {
addresses.add((String) field.getValue());
}
}
}
}
}
return addresses;
}
public DepositFile getMainFile() {
return mainFile;
}
public void setMainFile(DepositFile mainFile) {
this.mainFile = mainFile;
}
public DepositFile[] getSupplementalFiles() {
return supplementalFiles;
}
public void setSupplementalFiles(DepositFile[] supplementalFiles) {
this.supplementalFiles = supplementalFiles;
}
public void deleteAllFiles() {
deleteAllFiles(false);
}
public void deleteAllFiles(boolean deleteExternal) {
for (DepositFile depositFile : this.getAllFiles()) {
if (depositFile.getFile() != null) {
if (deleteExternal || !depositFile.isExternal())
depositFile.getFile().delete();
}
}
}
public List<DepositFile> getAllFiles() {
List<DepositFile> files = new ArrayList<DepositFile>();
if (this.getElements() != null) {
for (DepositElement element : this.getElements()) {
for (DepositEntry entry : element.getEntries()) {
if (entry.getFile() != null)
files.add(entry.getFile());
}
}
}
if (this.getMainFile() != null)
files.add(this.getMainFile());
if (this.getAgreementFile() != null) {
files.add(this.getAgreementFile());
}
if (this.getSupplementalFiles() != null) {
for (DepositFile depositFile : this.getSupplementalFiles()) {
if (depositFile != null)
files.add(depositFile);
}
}
if (this.getSupplementalObjects() != null) {
for (SupplementalObject object : this.getSupplementalObjects()) {
if (object != null && object.getDepositFile() != null)
files.add(object.getDepositFile());
}
}
return files;
}
public List<DepositElement> getElements() {
return elements;
}
public void setElements(List<DepositElement> elements) {
this.elements = elements;
}
public List<SupplementalObject> getSupplementalObjects() {
return supplementalObjects;
}
public void setSupplementalObjects(List<SupplementalObject> supplementalObjects) {
this.supplementalObjects = supplementalObjects;
}
}