package com.venky.swf.views.controls.model; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import com.venky.core.util.ObjectUtil; import com.venky.swf.db.Database; import com.venky.swf.db.JdbcTypeHelper.TypeConverter; import com.venky.swf.db.model.Model; import com.venky.swf.db.model.reflection.ModelReflector; import com.venky.swf.path.Path; import com.venky.swf.views.controls.Control; import com.venky.swf.views.controls.page.Form; import com.venky.swf.views.controls.page.text.AutoCompleteText; import com.venky.swf.views.controls.page.text.TextArea; import com.venky.swf.views.model.FieldUIMetaProvider; public class ModelListEditableTable<M extends Model> extends ModelListTable<M>{ public ModelListEditableTable(Path path, ModelAwareness modelAwareNess, FieldUIMetaProvider uimetaprovider, Form submittedWithForm) { super(path,modelAwareNess, uimetaprovider); this.submittedWithForm = submittedWithForm; } private Form submittedWithForm = null; private static final long serialVersionUID = 5242933868664884989L; protected List<Method> getSingleRecordActions(){ return new ArrayList<Method>(); } @Override protected Control getControl(String controlName, String fieldName, M record){ ModelAwareness helper = getModelAwareness(); ModelReflector<M> reflector = helper.getReflector(); Method getter = reflector.getFieldGetter(fieldName); TypeConverter<?> converter = Database.getJdbcTypeHelper(reflector.getPool()).getTypeRef(getter.getReturnType()).getTypeConverter(); Control control = helper.getInputControl(controlName, fieldName, record, getMetaprovider()); if (!(control instanceof AutoCompleteText)){ control.addClass(converter.getDisplayClassName()); } control.setForm(submittedWithForm.getId()); return control; } protected int length(String value){ if (value == null){ return 0; } int length = 0; StringTokenizer tok = new StringTokenizer(value,"\r\n",false); while (tok.hasMoreTokens()){ String token = tok.nextToken(); length = Math.max(length, token.length()); } return length; } protected int getDataLength(Control control){ int length = 0; String value = null; value = control.getValue(); if (ObjectUtil.isVoid(value)){ value = control.getText(); } if (!ObjectUtil.isVoid(value)){ length = length(value); } if (length == 0 ){ if (control instanceof AutoCompleteText){ @SuppressWarnings("unchecked") AutoCompleteText<? extends Model> act = (AutoCompleteText<? extends Model>)control; length = act.getMaxDataLength(); }else if (control instanceof TextArea){ length = 50; } } return length; } }