fix annotion parser bug and made some logger changes and added max page size support
This commit is contained in:
parent
90fef5b762
commit
cd2e3eaf50
|
@ -179,37 +179,47 @@ public class VascAnnotationParser {
|
||||||
|
|
||||||
public String getVascDisplayName(Class<?> beanClass) {
|
public String getVascDisplayName(Class<?> beanClass) {
|
||||||
//System.out.println("========== GetDisPlayName: "+beanClass);
|
//System.out.println("========== GetDisPlayName: "+beanClass);
|
||||||
|
|
||||||
|
// first search in class for display name
|
||||||
for (Method method:beanClass.getMethods()) {
|
for (Method method:beanClass.getMethods()) {
|
||||||
if (method.getName().startsWith("get")==false) { //a bit durty
|
if (method.getName().startsWith("get")==false) { //a bit durty
|
||||||
continue;
|
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);
|
Annotation anno = method.getAnnotation(VascDisplayName.class);
|
||||||
if (anno==null) {
|
if (anno==null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//System.out.println("Found normal");
|
|
||||||
return method.getName().substring(3,4).toLowerCase()+method.getName().substring(4); // field name without get
|
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");
|
//System.out.println("Defraulting to key");
|
||||||
return getVascPrimaryKey(beanClass); // fall back on primary key
|
return getVascPrimaryKey(beanClass); // fall back on primary key
|
||||||
}
|
}
|
||||||
|
@ -245,23 +255,32 @@ public class VascAnnotationParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVascPrimaryKey(Class<?> beanClass) {
|
public String getVascPrimaryKey(Class<?> beanClass) {
|
||||||
|
|
||||||
|
// first search Key anno
|
||||||
for (Method method:beanClass.getMethods()) {
|
for (Method method:beanClass.getMethods()) {
|
||||||
if(method.getName().startsWith("get")==false) { //a bit durty
|
if(method.getName().startsWith("get")==false) { //a bit durty
|
||||||
continue;
|
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);
|
Annotation anno = method.getAnnotation(VascPrimaryKey.class);
|
||||||
if (anno==null) {
|
if (anno==null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
return method.getName().substring(3,4).toLowerCase()+method.getName().substring(4); // field name without get
|
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() ?
|
return null; // maybe fallback on getId() ?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ abstract public class AbstractVascBackendState implements VascBackendState {
|
||||||
protected Map<String,Object> parameters = null;
|
protected Map<String,Object> parameters = null;
|
||||||
private int pageIndex = 0;
|
private int pageIndex = 0;
|
||||||
private int pageSize = 0;
|
private int pageSize = 0;
|
||||||
|
private int pageSizeMax = 0;
|
||||||
private String sortField = null;
|
private String sortField = null;
|
||||||
private String searchString = null;
|
private String searchString = null;
|
||||||
private boolean ascending = true;
|
private boolean ascending = true;
|
||||||
|
@ -131,4 +132,18 @@ abstract public class AbstractVascBackendState implements VascBackendState {
|
||||||
public void setSortField(String sortField) {
|
public void setSortField(String sortField) {
|
||||||
this.sortField=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;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -49,6 +49,9 @@ public interface VascBackendState extends Serializable {
|
||||||
public void setPageSize(int size);
|
public void setPageSize(int size);
|
||||||
public int getPageSize();
|
public int getPageSize();
|
||||||
|
|
||||||
|
public void setPageSizeMax(int size);
|
||||||
|
public int getPageSizeMax();
|
||||||
|
|
||||||
public void setPageIndex(int index);
|
public void setPageIndex(int index);
|
||||||
public int getPageIndex();
|
public int getPageIndex();
|
||||||
|
|
||||||
|
|
|
@ -504,6 +504,8 @@ public class JSFVascEntrySupportBean implements Serializable {
|
||||||
VascEntryState state = vascEntry.getVascFrontendData().getVascEntryState();
|
VascEntryState state = vascEntry.getVascFrontendData().getVascEntryState();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
setSelectedMultiRowAction("null"); // reset to selected ... value
|
||||||
|
|
||||||
for (Integer rowId:state.getMultiActionSelection().keySet()) {
|
for (Integer rowId:state.getMultiActionSelection().keySet()) {
|
||||||
Boolean value = state.getMultiActionSelection().get(rowId);
|
Boolean value = state.getMultiActionSelection().get(rowId);
|
||||||
logger.fine("multiRow selected: "+rowId+" value: "+value);
|
logger.fine("multiRow selected: "+rowId+" value: "+value);
|
||||||
|
@ -511,9 +513,11 @@ public class JSFVascEntrySupportBean implements Serializable {
|
||||||
Object row = state.getEntryDataList().get(rowId);
|
Object row = state.getEntryDataList().get(rowId);
|
||||||
logger.finer("row: "+row);
|
logger.finer("row: "+row);
|
||||||
action.doRowAction(vascEntry, 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
|
state.getMultiActionSelection().clear(); // after down deselect all options
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
|
@ -802,7 +806,9 @@ public class JSFVascEntrySupportBean implements Serializable {
|
||||||
logger.fine("cancelAction");
|
logger.fine("cancelAction");
|
||||||
JSFVascUIComponent comp = JSFVascUIComponent.findVascParent(event.getComponent());
|
JSFVascUIComponent comp = JSFVascUIComponent.findVascParent(event.getComponent());
|
||||||
VascEntry entry = comp.getVascEntry();
|
VascEntry entry = comp.getVascEntry();
|
||||||
this.getSelected().setRealValue(false);
|
if (getSelected()!=null) {
|
||||||
|
getSelected().setRealValue(false);
|
||||||
|
}
|
||||||
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(null);
|
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(null);
|
||||||
try {
|
try {
|
||||||
entry.getVascFrontendData().getVascFrontend().renderView();
|
entry.getVascFrontendData().getVascFrontend().renderView();
|
||||||
|
@ -844,7 +850,26 @@ public class JSFVascEntrySupportBean implements Serializable {
|
||||||
logger.fine("deleteAction");
|
logger.fine("deleteAction");
|
||||||
JSFVascUIComponent comp = JSFVascUIComponent.findVascParent(event.getComponent());
|
JSFVascUIComponent comp = JSFVascUIComponent.findVascParent(event.getComponent());
|
||||||
VascEntry entry = comp.getVascEntry();
|
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 {
|
try {
|
||||||
entry.getVascFrontendData().getVascFrontend().renderView();
|
entry.getVascFrontendData().getVascFrontend().renderView();
|
||||||
} catch (Exception e) {
|
} 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...
|
// TODO: FIX this change listener is called before save action in row EDIT...
|
||||||
if (id==null) {
|
if (id==null) {
|
||||||
logger.info("FIXME: unexcepted call to direct download");
|
logger.finer("FIXME: unexcepted call to direct download");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -920,7 +945,7 @@ public class JSFVascEntrySupportBean implements Serializable {
|
||||||
|
|
||||||
// TODO: FIX this change listener is called before save action in row EDIT...
|
// TODO: FIX this change listener is called before save action in row EDIT...
|
||||||
if (id==null) {
|
if (id==null) {
|
||||||
logger.info("FIXME: unexcepted call to direct page change");
|
logger.finer("FIXME: unexcepted call to direct page change");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -967,7 +992,7 @@ public class JSFVascEntrySupportBean implements Serializable {
|
||||||
* @param selected the selected to set
|
* @param selected the selected to set
|
||||||
*/
|
*/
|
||||||
public void setSelected(VascDataBackendBean selected) {
|
public void setSelected(VascDataBackendBean selected) {
|
||||||
logger.info("Set selected records: "+selected+" on: "+this);
|
logger.fine("Set selected records: "+selected+" on: "+this);
|
||||||
this.selected = selected;
|
this.selected = selected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ package com.idcanet.vasc.frontends.web.jsf;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
@ -291,9 +292,21 @@ public class JSFVascUIComponentRenderer extends Renderer {
|
||||||
model.setValue(option.getDefaultValue());
|
model.setValue(option.getDefaultValue());
|
||||||
UIInput jsfEdit = (UIInput)editor.createComponent(entry,option,model,grid);
|
UIInput jsfEdit = (UIInput)editor.createComponent(entry,option,model,grid);
|
||||||
jsfEdit.addValueChangeListener(new ModelChangeListener(model));
|
jsfEdit.addValueChangeListener(new ModelChangeListener(model));
|
||||||
|
Class<?> clazz = option.getVascEntryFieldType().getAutoDetectClass();
|
||||||
editor.setDisabled(false); // TODO: HACK for JSFLIST for model remove me !
|
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
|
// i==0 is for multi field editor support... which is stell very in progress aka not working
|
||||||
if (i==0) {
|
if (i==0) {
|
||||||
entry.getVascFrontendData().addFieldVascUIComponents(option, editor,jsfEdit);
|
entry.getVascFrontendData().addFieldVascUIComponents(option, editor,jsfEdit);
|
||||||
|
|
|
@ -51,6 +51,9 @@ public class JSFVascValidatePhaseListener implements PhaseListener {
|
||||||
if (comp==null) {
|
if (comp==null) {
|
||||||
return; // non-vasc ui-input
|
return; // non-vasc ui-input
|
||||||
}
|
}
|
||||||
|
if (comp.getSupportBean().getSelected()==null) {
|
||||||
|
return; // no editing
|
||||||
|
}
|
||||||
VascEntry entry = comp.getVascEntry();
|
VascEntry entry = comp.getVascEntry();
|
||||||
if (entry.getVascFrontendData().getVascEntryState().getEntryDataObject()==null) {
|
if (entry.getVascFrontendData().getVascEntryState().getEntryDataObject()==null) {
|
||||||
return; // we are not in edit mode.
|
return; // we are not in edit mode.
|
||||||
|
|
|
@ -82,6 +82,7 @@ public class DefaultVascFactory {
|
||||||
vascFrontendData.setVascEntryState(new DefaultVascEntryState());
|
vascFrontendData.setVascEntryState(new DefaultVascEntryState());
|
||||||
vascFrontendData.getVascEntryState().setVascBackendState(new DefaultVascBackendState());
|
vascFrontendData.getVascEntryState().setVascBackendState(new DefaultVascBackendState());
|
||||||
vascFrontendData.getVascEntryState().getVascBackendState().setPageSize(100); // default page size is zero aka disabled
|
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() {
|
vascFrontendData.setExceptionListener(new VascEntryEventListener() {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
public void vascEvent(VascEntry entry, VascEventType type,Object data) {
|
public void vascEvent(VascEntry entry, VascEventType type,Object data) {
|
||||||
|
|
|
@ -353,6 +353,11 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
|
||||||
public void refreshData(VascEntry entry) {
|
public void refreshData(VascEntry entry) {
|
||||||
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(null);
|
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(null);
|
||||||
try {
|
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()) {
|
for (String key:entry.getEntryParameterKeys()) {
|
||||||
Object value = entry.getEntryParameter(key);
|
Object value = entry.getEntryParameter(key);
|
||||||
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setDataParameter(key, value);
|
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setDataParameter(key, value);
|
||||||
|
|
|
@ -95,13 +95,25 @@ public class DefaultVascSelectItemModel implements VascSelectItemModel {
|
||||||
result.add(item);
|
result.add(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
// set para
|
// set def para
|
||||||
VascBackendState state = new DefaultVascBackendState();
|
VascBackendState state = new DefaultVascBackendState();
|
||||||
for (String key2:ve.getEntryParameterKeys()) {
|
for (String key2:ve.getEntryParameterKeys()) {
|
||||||
Object value = ve.getEntryParameter(key2);
|
Object value = ve.getEntryParameter(key2);
|
||||||
//System.out.println("Copy paras name: "+key2+" value: "+value+" class: "+value.getClass().getName());
|
//System.out.println("Copy paras name: "+key2+" value: "+value+" class: "+value.getClass().getName());
|
||||||
state.setDataParameter(key2, value);
|
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()) {
|
for (String paraName:entryParameterFieldIds.keySet()) {
|
||||||
|
|
||||||
VascEntry fieldEntry = entry;
|
VascEntry fieldEntry = entry;
|
||||||
|
|
Loading…
Reference in a new issue