package cdr.forms;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import crosswalk.DateInputField;
import crosswalk.EmailInputField;
import crosswalk.FileBlock;
import crosswalk.FormElement;
import crosswalk.InputField;
import crosswalk.MetadataBlock;
import crosswalk.TextInputField;
public class DepositElement {
private String append;
private FormElement formElement;
private List<DepositEntry> entries;
public FormElement getFormElement() {
return formElement;
}
public void setFormElement(FormElement formElement) {
this.formElement = formElement;
}
public List<DepositEntry> getEntries() {
return entries;
}
public void setEntries(List<DepositEntry> entries) {
this.entries = entries;
}
public String getAppend() {
return append;
}
public void setAppend(String append) {
this.append = append;
}
/**
* Appends a new entry to the entries array, based on this element's
* FormElement.
*/
public void appendEntry() {
// If our form element is a metadata block and we have added as many entries
// as the maxRepeat attribute, silently refuse to add more entries.
if (formElement instanceof MetadataBlock) {
if (entries.size() >= ((MetadataBlock) formElement).getMaxRepeat()) {
return;
}
}
// Create a new instance of DepositEntry. If this element's FormElement
// is an instance of MetadataBlock, a list of DepositField is created, one
// field for every port. Otherwise, the entry's list of fields is left unset.
DepositEntry depositEntry = new DepositEntry();
depositEntry.setFormElement(formElement);
if (formElement instanceof MetadataBlock) {
List<DepositField<?>> fields = new ArrayList<DepositField<?>>();
for (InputField<?> field : ((MetadataBlock) formElement).getPorts()) {
if (field instanceof DateInputField) {
DateDepositField depositField = new DateDepositField();
depositField.setFormInputField(field);
fields.add(depositField);
} else if (field instanceof TextInputField) {
TextDepositField depositField = new TextDepositField();
depositField.setFormInputField(field);
fields.add(depositField);
} else if (field instanceof EmailInputField) {
EmailDepositField depositField = new EmailDepositField();
depositField.setFormInputField(field);
fields.add(depositField);
} else {
throw new Error("Unknown input field type");
}
}
depositEntry.setFields(fields);
}
entries.add(depositEntry);
}
}