package com.akjava.lib.common.form;
import java.util.ArrayList;
import java.util.List;
import com.akjava.lib.common.form.FormFieldDataDto.OptionLabelToValueFunction;
import com.akjava.lib.common.form.FormFieldDataDto.OptionValueToLabelFunction;
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
public class FormData {
private List<Relation> childrens=new ArrayList<Relation>();
public List<Relation> getChildrens() {
return childrens;
}
public List<Relation> getParents() {
return parents;
}
public synchronized void addChildren(Relation relation){
childrens.add(relation);
}
public synchronized void addParent(Relation parent){
parents.add(parent);
}
private List<String> supportCookies=new ArrayList<String>();
public List<String> getSupportCookies() {
return supportCookies;
}
public void setSupportCookies(List<String> supportCookies) {
this.supportCookies = supportCookies;
}
private List<Relation> parents=new ArrayList<Relation>();
private String name;
private String className;
private String description;
private boolean adminOnly;
private int pageSize=10;
private int adminPageSize=10;
private int subPageSize=5;
private String subPageOrder;
public int getSubPageSize() {
return subPageSize;
}
public void setSubPageSize(int subPageSize) {
this.subPageSize = subPageSize;
}
public String getSubPageOrder() {
return subPageOrder;
}
public void setSubPageOrder(String subPageOrder) {
this.subPageOrder = subPageOrder;
}
private String adminPageOrder;//if null used cdate if exists,otherwise use first one;usually it is id
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getAdminPageSize() {
return adminPageSize;
}
public void setAdminPageSize(int adminPageSize) {
this.adminPageSize = adminPageSize;
}
public String getAdminPageOrder() {
return adminPageOrder;
}
public void setAdminPageOrder(String adminPageOrder) {
this.adminPageOrder = adminPageOrder;
}
public String getPageOrder() {
return pageOrder;
}
public void setPageOrder(String pageOrder) {
this.pageOrder = pageOrder;
}
private String pageOrder;//if null used cdate if exists,otherwise use first one;usually it is id
public boolean isAdminOnly() {
return adminOnly;
}
public void setAdminOnly(boolean adminOnly) {
this.adminOnly = adminOnly;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
private List<FormFieldData> formFieldDatas;
public List<FormFieldData> getFormFieldDatas() {
return formFieldDatas;
}
public void addFormFieldData(FormFieldData fdata){
if(formFieldDatas==null){
formFieldDatas=new ArrayList<FormFieldData>();
}
formFieldDatas.add(fdata);
fdata.setParent(this);
}
/*
public void setFormFieldDatas(List<FormFieldData> formFieldDatas) {
this.formFieldDatas = formFieldDatas;
}
*/
public boolean isChecked(String key,String value){
//
return false;
}
public FormFieldData getFieldData(String key){
for(FormFieldData fdata:formFieldDatas){
if(fdata.getKey().equals(key)){
return fdata;
}
}
return null;
}
public FormFieldData getIdFieldData(){
for(FormFieldData fdata:getFormFieldDatas()){
if(fdata.getType()==FormFieldData.TYPE_ID){
return fdata;
}
if(getFormFieldDatas().size()>0){
return getFormFieldDatas().get(0);
}else{
throw new RuntimeException("empty field datas");
}
//TODO test if set no id filed and first one is String ,can we use it as id
}
return null;
}
@Override
public String toString() {
String fields="";
if(getFormFieldDatas()!=null){
for(FormFieldData fdata:getFormFieldDatas()){
fields+="<"+fdata.toString()+">\n";
}
}
String out=Objects.toStringHelper(this).add("name", name).add("className", className).add("description", description).add("adminOnly", ""+isAdminOnly())
.add("fields", "\n"+fields+"\n").toString();
return out;
}
//for select & checkbox but it is too complex
public String getLabelText(String key,String value){
for(FormFieldData fdata:getFormFieldDatas()){
if(fdata.getKey().equals(key)){
if(fdata.getType()== FormFieldData.TYPE_SELECT_SINGLE ||fdata.getType()== FormFieldData.TYPE_SELECT_MULTI ){
OptionValueToLabelFunction function=new OptionValueToLabelFunction(fdata.getOptionValues());
List<String> values=Lists.newArrayList(value.split(","));
return FormDataDto.commaJoiner.join(Lists.transform(values, function));
}else if(fdata.getType()==FormFieldData.TYPE_CHECK){
if(fdata.getOptionValues()==null){
return value;//value must be "on"
}else{
String checkedPrintValue=null;
String uncheckedPrintValue=null;
if(fdata.getOptionValues().size()>0){
checkedPrintValue=fdata.getOptionValues().get(0).getPrintValue();
}
if(fdata.getOptionValues().size()>1){
uncheckedPrintValue=fdata.getOptionValues().get(1).getPrintValue();
}
String lower=value.toLowerCase();
if(value!=null && "on".equals(lower)){//on is defalt check value
if(checkedPrintValue!=null){
return checkedPrintValue;
}else{
return value;
}
}else{
if(fdata.getOptionValues().size()>0){
if(fdata.getOptionValues().get(0).getValue().equals(value)){
return checkedPrintValue;
}else{
if(fdata.getOptionValues().size()>1){
return uncheckedPrintValue;
}
}
}
}
return value;//maybe some mistake
}
//
}else{
//simply return value another case
return value;
}
}
}
return null;
}
//only for select or select_multi (check has no label)
public String getValueByLabel(String key,String label){
for(FormFieldData fdata:getFormFieldDatas()){
if(fdata.getKey().equals(key)){
if(fdata.getType()== FormFieldData.TYPE_SELECT_SINGLE ||fdata.getType()== FormFieldData.TYPE_SELECT_MULTI ){
OptionLabelToValueFunction function=new OptionLabelToValueFunction(fdata.getOptionValues());
List<String> values=Lists.newArrayList(label.split(","));
return FormDataDto.commaJoiner.join(Lists.transform(values, function));
}
}
}
return label;
}
}