2
0
Fork 0

fix annotion parser bug and made some logger changes and added max page size support

This commit is contained in:
willemc 2010-05-06 18:34:30 +02:00
parent 90fef5b762
commit cd2e3eaf50
9 changed files with 134 additions and 38 deletions

View file

@ -179,37 +179,47 @@ public class VascAnnotationParser {
public String getVascDisplayName(Class<?> beanClass) {
//System.out.println("========== GetDisPlayName: "+beanClass);
// first search in class for display name
for (Method method:beanClass.getMethods()) {
if (method.getName().startsWith("get")==false) { //a bit durty
continue;
}
VascFieldTemplate template = method.getAnnotation(VascFieldTemplate.class);
if (template!=null) {
//System.out.println("Search template for: "+method.getName());
String tempProp = method.getName().substring(3);
if ("".equals(template.template())==false) {
tempProp = template.template();
}
for (Method method2:template.templateClass().getMethods()) {
if (method2.getName().equalsIgnoreCase("get"+tempProp)==false) { //a bit durty
continue;
}
Annotation anno = method2.getAnnotation(VascDisplayName.class);
//System.out.println("Template annot: "+anno+" prop: "+tempProp);
if (anno==null) {
break;
}
//System.out.println("Found template");
return method.getName().substring(3,4).toLowerCase()+method.getName().substring(4); // field name without get
}
}
Annotation anno = method.getAnnotation(VascDisplayName.class);
if (anno==null) {
continue;
}
//System.out.println("Found normal");
return method.getName().substring(3,4).toLowerCase()+method.getName().substring(4); // field name without get
}
// then search in class for display name on templated fields.
for (Method method:beanClass.getMethods()) {
if (method.getName().startsWith("get")==false) { //a bit durty
continue;
}
VascFieldTemplate template = method.getAnnotation(VascFieldTemplate.class);
if (template==null) {
continue; // no template anno
}
//System.out.println("Search template for: "+method.getName());
String tempProp = method.getName().substring(3);
if ("".equals(template.template())==false) {
tempProp = template.template();
}
for (Method method2:template.templateClass().getMethods()) {
if (method2.getName().equalsIgnoreCase("get"+tempProp)==false) { //a bit durty
continue;
}
Annotation anno = method2.getAnnotation(VascDisplayName.class);
//System.out.println("Template annot: "+anno+" prop: "+tempProp);
if (anno==null) {
break;
}
//System.out.println("Found template");
return method.getName().substring(3,4).toLowerCase()+method.getName().substring(4); // field name without get
}
}
//System.out.println("Defraulting to key");
return getVascPrimaryKey(beanClass); // fall back on primary key
}
@ -245,23 +255,32 @@ public class VascAnnotationParser {
}
public String getVascPrimaryKey(Class<?> beanClass) {
// first search Key anno
for (Method method:beanClass.getMethods()) {
if(method.getName().startsWith("get")==false) { //a bit durty
continue;
}
VascFieldTemplate template = method.getAnnotation(VascFieldTemplate.class);
if (template!=null) {
String value = getVascPrimaryKey(template.templateClass());
if (value!=null) {
return value;
}
}
Annotation anno = method.getAnnotation(VascPrimaryKey.class);
if (anno==null) {
continue;
}
return method.getName().substring(3,4).toLowerCase()+method.getName().substring(4); // field name without get
}
for (Method method:beanClass.getMethods()) {
if(method.getName().startsWith("get")==false) { //a bit durty
continue;
}
VascFieldTemplate template = method.getAnnotation(VascFieldTemplate.class);
if (template==null) {
continue; // no template
}
String value = getVascPrimaryKey(template.templateClass()); // note templateing the templated class is possible
if (value!=null) {
return value;
}
}
return null; // maybe fallback on getId() ?
}

View file

@ -41,6 +41,7 @@ abstract public class AbstractVascBackendState implements VascBackendState {
protected Map<String,Object> parameters = null;
private int pageIndex = 0;
private int pageSize = 0;
private int pageSizeMax = 0;
private String sortField = null;
private String searchString = null;
private boolean ascending = true;
@ -131,4 +132,18 @@ abstract public class AbstractVascBackendState implements VascBackendState {
public void setSortField(String sortField) {
this.sortField=sortField;
}
/**
* @return the pageSizeMax
*/
public int getPageSizeMax() {
return pageSizeMax;
}
/**
* @param pageSizeMax the pageSizeMax to set
*/
public void setPageSizeMax(int pageSizeMax) {
this.pageSizeMax = pageSizeMax;
}
}

View file

@ -49,6 +49,9 @@ public interface VascBackendState extends Serializable {
public void setPageSize(int size);
public int getPageSize();
public void setPageSizeMax(int size);
public int getPageSizeMax();
public void setPageIndex(int index);
public int getPageIndex();

View file

@ -504,6 +504,8 @@ public class JSFVascEntrySupportBean implements Serializable {
VascEntryState state = vascEntry.getVascFrontendData().getVascEntryState();
try {
setSelectedMultiRowAction("null"); // reset to selected ... value
for (Integer rowId:state.getMultiActionSelection().keySet()) {
Boolean value = state.getMultiActionSelection().get(rowId);
logger.fine("multiRow selected: "+rowId+" value: "+value);
@ -511,9 +513,11 @@ public class JSFVascEntrySupportBean implements Serializable {
Object row = state.getEntryDataList().get(rowId);
logger.finer("row: "+row);
action.doRowAction(vascEntry, row);
if (action.getId().equals(DeleteRowAction.ACTION_ID)) {
return;
}
}
}
setSelectedMultiRowAction("null"); // reset to selected ... value
state.getMultiActionSelection().clear(); // after down deselect all options
} catch (Exception e) {
// TODO Auto-generated catch block
@ -802,7 +806,9 @@ public class JSFVascEntrySupportBean implements Serializable {
logger.fine("cancelAction");
JSFVascUIComponent comp = JSFVascUIComponent.findVascParent(event.getComponent());
VascEntry entry = comp.getVascEntry();
this.getSelected().setRealValue(false);
if (getSelected()!=null) {
getSelected().setRealValue(false);
}
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(null);
try {
entry.getVascFrontendData().getVascFrontend().renderView();
@ -844,7 +850,26 @@ public class JSFVascEntrySupportBean implements Serializable {
logger.fine("deleteAction");
JSFVascUIComponent comp = JSFVascUIComponent.findVascParent(event.getComponent());
VascEntry entry = comp.getVascEntry();
entry.getVascFrontendData().getVascFrontendHelper().deleteObject(entry);
VascEntryState state = entry.getVascFrontendData().getVascEntryState();
if (state.getMultiActionSelection().isEmpty()==false) {
List<Object> sels = new ArrayList<Object>(5);
for (Integer rowId:state.getMultiActionSelection().keySet()) {
Boolean value = state.getMultiActionSelection().get(rowId);
logger.fine("multiRow delete: "+rowId+" value: "+value);
if (value!=null && value==true) {
Object row = state.getEntryDataList().get(rowId);
sels.add(row);
}
}
for (Object row:sels) {
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(row);
entry.getVascFrontendData().getVascFrontendHelper().deleteObject(entry);
}
state.getMultiActionSelection().clear(); // after down deselect all options
} else {
entry.getVascFrontendData().getVascFrontendHelper().deleteObject(entry);
}
try {
entry.getVascFrontendData().getVascFrontend().renderView();
} catch (Exception e) {
@ -862,7 +887,7 @@ public class JSFVascEntrySupportBean implements Serializable {
// TODO: FIX this change listener is called before save action in row EDIT...
if (id==null) {
logger.info("FIXME: unexcepted call to direct download");
logger.finer("FIXME: unexcepted call to direct download");
return;
}
@ -920,7 +945,7 @@ public class JSFVascEntrySupportBean implements Serializable {
// TODO: FIX this change listener is called before save action in row EDIT...
if (id==null) {
logger.info("FIXME: unexcepted call to direct page change");
logger.finer("FIXME: unexcepted call to direct page change");
return;
}
@ -967,7 +992,7 @@ public class JSFVascEntrySupportBean implements Serializable {
* @param selected the selected to set
*/
public void setSelected(VascDataBackendBean selected) {
logger.info("Set selected records: "+selected+" on: "+this);
logger.fine("Set selected records: "+selected+" on: "+this);
this.selected = selected;
}

View file

@ -28,6 +28,7 @@ package com.idcanet.vasc.frontends.web.jsf;
import java.io.IOException;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.util.List;
import java.util.logging.Logger;
@ -291,9 +292,21 @@ public class JSFVascUIComponentRenderer extends Renderer {
model.setValue(option.getDefaultValue());
UIInput jsfEdit = (UIInput)editor.createComponent(entry,option,model,grid);
jsfEdit.addValueChangeListener(new ModelChangeListener(model));
editor.setDisabled(false); // TODO: HACK for JSFLIST for model remove me !
Class<?> clazz = option.getVascEntryFieldType().getAutoDetectClass();
if (clazz!=null && model.getValue()!=null) {
if (clazz.equals(model.getValue().getClass())==false) {
// lets try setting correct default.
try {
Constructor<?> c = clazz.getConstructor(String.class);
Object value = c.newInstance(model.getValue());
jsfEdit.setValue(value);
} catch (Exception e) {
throw new VascException(e);
}
} else {
jsfEdit.setValue(model.getValue()); // set default value
}
}
// i==0 is for multi field editor support... which is stell very in progress aka not working
if (i==0) {
entry.getVascFrontendData().addFieldVascUIComponents(option, editor,jsfEdit);

View file

@ -51,6 +51,9 @@ public class JSFVascValidatePhaseListener implements PhaseListener {
if (comp==null) {
return; // non-vasc ui-input
}
if (comp.getSupportBean().getSelected()==null) {
return; // no editing
}
VascEntry entry = comp.getVascEntry();
if (entry.getVascFrontendData().getVascEntryState().getEntryDataObject()==null) {
return; // we are not in edit mode.

View file

@ -82,6 +82,7 @@ public class DefaultVascFactory {
vascFrontendData.setVascEntryState(new DefaultVascEntryState());
vascFrontendData.getVascEntryState().setVascBackendState(new DefaultVascBackendState());
vascFrontendData.getVascEntryState().getVascBackendState().setPageSize(100); // default page size is zero aka disabled
vascFrontendData.getVascEntryState().getVascBackendState().setPageSizeMax(1000); // max 1k records on screen.
vascFrontendData.setExceptionListener(new VascEntryEventListener() {
private static final long serialVersionUID = 1L;
public void vascEvent(VascEntry entry, VascEventType type,Object data) {

View file

@ -353,6 +353,11 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
public void refreshData(VascEntry entry) {
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(null);
try {
// check and correct max page size
if (entry.getVascFrontendData().getVascEntryState().getVascBackendState().getPageSize()>entry.getVascFrontendData().getVascEntryState().getVascBackendState().getPageSizeMax()) {
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setPageSize(entry.getVascFrontendData().getVascEntryState().getVascBackendState().getPageSizeMax());
}
for (String key:entry.getEntryParameterKeys()) {
Object value = entry.getEntryParameter(key);
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setDataParameter(key, value);

View file

@ -95,13 +95,25 @@ public class DefaultVascSelectItemModel implements VascSelectItemModel {
result.add(item);
}
// set para
// set def para
VascBackendState state = new DefaultVascBackendState();
for (String key2:ve.getEntryParameterKeys()) {
Object value = ve.getEntryParameter(key2);
//System.out.println("Copy paras name: "+key2+" value: "+value+" class: "+value.getClass().getName());
state.setDataParameter(key2, value);
}
// set list para
for (VascEntryField vef:ve.getListOptions()) {
Object def = vef.getDefaultValue();
if (def==null) {
continue;
}
String backendName = vef.getBackendName();
state.setDataParameter(backendName, def);
}
// set para from parent state entry
for (String paraName:entryParameterFieldIds.keySet()) {
VascEntry fieldEntry = entry;