2
0
Fork 0

Made unittest data backend for frontends and improved swing frontend.

Worked on metamodel backend and some other fixes.
This commit is contained in:
Willem Cazander 2012-05-03 17:13:36 +02:00
parent 1c308a684a
commit a25e98f5d5
65 changed files with 2820 additions and 499 deletions

View file

@ -53,6 +53,13 @@ abstract public class AbstractVascBackend implements VascBackend {
this.id=id;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#isReadOnly()
*/
public boolean isReadOnly() {
return false;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#isPageable()
*/

View file

@ -44,6 +44,8 @@ public interface VascBackend {
public List<Object> execute(VascBackendState state) throws VascException;
public boolean isReadOnly();
public void persist(Object object) throws VascException;
public Object merge(Object object) throws VascException;

View file

@ -22,6 +22,8 @@
package net.forwardfire.vasc.backend;
import java.util.List;
/**
*
@ -31,4 +33,6 @@ package net.forwardfire.vasc.backend;
public interface VascBackendController {
public VascBackend getVascBackendById(String id);
public List<String> getVascBackendIds();
}

View file

@ -0,0 +1,170 @@
package net.forwardfire.vasc.backend;
import java.util.ArrayList;
import java.util.List;
import net.forwardfire.vasc.backend.data.BeanVascEntryFieldValue;
import net.forwardfire.vasc.backend.data.BeanVascEntryRecordCreator;
import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryControllerLocal;
import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascEntryFieldSet;
import net.forwardfire.vasc.core.VascException;
import net.forwardfire.vasc.core.VascLinkEntry;
import net.forwardfire.vasc.core.entry.VascEntryFieldValue;
import net.forwardfire.vasc.core.entry.VascEntryRecordCreator;
import net.forwardfire.vasc.impl.DefaultVascEntry;
import net.forwardfire.vasc.impl.DefaultVascEntryField;
import net.forwardfire.vasc.impl.DefaultVascEntryFieldSet;
import net.forwardfire.vasc.impl.DefaultVascLinkEntry;
public class VirtualVascBackend extends AbstractVascBackend {
private VascController vascController = null;
private String vascType = "entry";
private String entryId = null;
public List<Object> execute(VascBackendState state) throws VascException {
List<Object> result = new ArrayList<Object>(100);
entryId = (String)state.getDataParameter("entry_id");
if ("entry".equals(vascType)) {
for (String id:vascController.getVascEntryController().getVascEntryIds()) {
result.add(vascController.getVascEntryController().getVascEntryById(id));
}
} else if ("field".equals(vascType)) {
if (entryId!=null) {
VascEntry ve = vascController.getVascEntryController().getVascEntryById(entryId);
result.addAll(ve.getVascEntryFields());
}
} else if ("fieldset".equals(vascType)) {
if (entryId!=null) {
VascEntry ve = vascController.getVascEntryController().getVascEntryById(entryId);
result.addAll(ve.getVascEntryFieldSets());
}
} else if ("linkentries".equals(vascType)) {
if (entryId!=null) {
VascEntry ve = vascController.getVascEntryController().getVascEntryById(entryId);
result.addAll(ve.getVascLinkEntries());
}
} else if ("listoptions".equals(vascType)) {
if (entryId!=null) {
VascEntry ve = vascController.getVascEntryController().getVascEntryById(entryId);
result.addAll(ve.getListOptions());
}
}
return result;
}
public void persist(Object object) throws VascException {
edit(object,false,true);
}
public Object merge(Object object) throws VascException {
return edit(object,true,true);
}
public void delete(Object object) throws VascException {
edit(object,true,false);
}
public Object edit(Object object,boolean removeReal,boolean addEdit) throws VascException {
if (object instanceof VascEntry) {
entryId = ((VascEntry)object).getId();
}
VascEntry veReal = ((VascEntryControllerLocal)vascController.getVascEntryController()).getMasterVascEntryById(entryId);
if ("entry".equals(vascType)) {
} else if ("field".equals(vascType)) {
VascEntryField vef = (VascEntryField)object;
if (removeReal) {
VascEntryField vefReal = veReal.getVascEntryFieldById(vef.getId());
veReal.removeVascEntryField(vefReal);
}
if (addEdit) {
veReal.addVascEntryField(vef);
}
} else if ("fieldset".equals(vascType)) {
VascEntryFieldSet vefs = (VascEntryFieldSet)object;
if (removeReal) {
VascEntryFieldSet vefsReal = veReal.getVascEntryFieldSetById(vefs.getId());
veReal.removeVascEntryFieldSet(vefsReal);
}
if (addEdit) {
veReal.addVascEntryFieldSet(vefs);
}
} else if ("linkentries".equals(vascType)) {
VascLinkEntry vefs = (VascLinkEntry)object;
if (removeReal) {
VascLinkEntry vefsReal = veReal.getVascLinkEntryById(vefs.getId());
veReal.removeVascLinkEntry(vefsReal);
}
if (addEdit) {
veReal.addVascLinkEntry(vefs);
}
} else if ("listoptions".equals(vascType)) {
VascEntryField vef = (VascEntryField)object;
if (removeReal) {
VascEntryField vefReal = veReal.getListOptionById(vef.getId());
veReal.removeListOption(vefReal);
}
if (addEdit) {
veReal.addListOption(vef);
}
}
return object;
}
public VascEntryFieldValue provideVascEntryFieldValue(VascEntryField field) {
return new BeanVascEntryFieldValue();
}
public VascEntryRecordCreator provideVascEntryRecordCreator(VascEntry vascEntry) {
if ("entry".equals(vascType)) {
return new BeanVascEntryRecordCreator(DefaultVascEntry.class);
} else if ("field".equals(vascType)) {
return new BeanVascEntryRecordCreator(DefaultVascEntryField.class);
} else if ("fieldset".equals(vascType)) {
return new BeanVascEntryRecordCreator(DefaultVascEntryFieldSet.class);
} else if ("linkentries".equals(vascType)) {
return new BeanVascEntryRecordCreator(DefaultVascLinkEntry.class);
} else if ("listoptions".equals(vascType)) {
return new BeanVascEntryRecordCreator(DefaultVascEntryField.class);
}
return null;
}
/**
* @return the vascController
*/
public VascController getVascController() {
return vascController;
}
/**
* @param vascController the vascController to set
*/
public void setVascController(VascController vascController) {
this.vascController = vascController;
}
/**
* @return the vascType
*/
public String getVascType() {
return vascType;
}
/**
* @param vascType the vascType to set
*/
public void setVascType(String vascType) {
this.vascType = vascType;
}
}

View file

@ -51,6 +51,13 @@ abstract public class AbstractVascBackendProxy implements VascBackend {
this.backend=backend;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#isReadOnly()
*/
public boolean isReadOnly() {
return backend.isReadOnly();
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#fetchTotalExecuteSize(VascBackendState state)
*/

View file

@ -22,12 +22,8 @@
package net.forwardfire.vasc.backend.proxy;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.forwardfire.vasc.backend.VascBackend;
import net.forwardfire.vasc.backend.VascBackendState;
@ -36,8 +32,6 @@ import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascException;
import net.forwardfire.vasc.core.entry.VascEntryFieldValue;
/**
* Simple text search
*
@ -82,6 +76,9 @@ public class VascBackendProxySearch extends AbstractVascBackendProxy {
for (VascEntryField field:entry.getVascEntryFields()) {
VascEntryFieldValue fieldValue = backend.provideVascEntryFieldValue(field);
Object value = fieldValue.getValue(field, record);
if (value==null) {
continue; // can't search null values.
}
String r = value.toString().toLowerCase();
if (r.contains(searchString)) {
search.add(record);

View file

@ -33,9 +33,6 @@ import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascException;
import net.forwardfire.vasc.core.entry.VascEntryFieldValue;
/**
* Add an sortware sort an a backend
*
@ -66,14 +63,15 @@ public class VascBackendProxySort extends AbstractVascBackendProxy {
try {
final VascEntryField field = entry.getVascEntryFieldById(state.getSortField());
final VascEntryFieldValue fieldValue = backend.provideVascEntryFieldValue(field.clone());
Collections.sort(result, new Comparator() {
Collections.sort(result, new Comparator<Object>() {
@SuppressWarnings("rawtypes")
public int compare(Object o1, Object o2) {
try {
Comparable c1 = null;
Comparable c2 = null;
if (field.getDisplayName()!=null) {
c1 = (Comparable)fieldValue.getDisplayValue(field, o1);
c2 = (Comparable)fieldValue.getDisplayValue(field, o2);
c1 = fieldValue.getDisplayValue(field, o1);
c2 = fieldValue.getDisplayValue(field, o2);
} else {
c1 = (Comparable)fieldValue.getValue(field, o1);
c2 = (Comparable)fieldValue.getValue(field, o2);

View file

@ -27,6 +27,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.x4o.xml.conv.ObjectConverter;
import net.forwardfire.vasc.core.ui.VascUIComponent;
import net.forwardfire.vasc.core.ui.VascValueModel;
import net.forwardfire.vasc.validators.VascValidator;
@ -45,6 +47,7 @@ abstract public class AbstractVascEntryFieldType implements VascEntryFieldType {
protected Class<?> autoDetectClass = null;
protected List<VascValidator> vascValidators = null;
protected Map<String,String> properties = null;
protected ObjectConverter objectConverter = null;
protected Object dataObject = null;
protected String uiComponentId = null;
@ -215,4 +218,18 @@ abstract public class AbstractVascEntryFieldType implements VascEntryFieldType {
VascValueModel model = new VascValueModel();
return model;
}
/**
* @return the objectConverter
*/
public ObjectConverter getObjectConverter() {
return objectConverter;
}
/**
* @param objectConverter the objectConverter to set
*/
public void setObjectConverter(ObjectConverter objectConverter) {
this.objectConverter = objectConverter;
}
}

View file

@ -403,7 +403,9 @@ public interface VascEntry extends Cloneable,Serializable {
public void addListOption(VascEntryField listOption);
public void removeListOption(VascEntryField listOption);
public List<VascEntryField> getListOptions();
public VascEntryField getListOptionById(String listOptionId);
public void addVascBackendFilter(VascBackendFilter filter);

View file

@ -377,7 +377,7 @@ public interface VascEntryField extends Cloneable,Serializable {
public void setGraphable(Boolean graphable);
/**
* Force impl to have public clone methode
* Force impl to have public clone method
* @return
* @throws CloneNotSupportedException
*/

View file

@ -25,6 +25,8 @@ package net.forwardfire.vasc.core;
import java.io.Serializable;
import java.util.List;
import org.x4o.xml.conv.ObjectConverter;
import net.forwardfire.vasc.core.ui.VascUIComponent;
import net.forwardfire.vasc.core.ui.VascValueModel;
import net.forwardfire.vasc.validators.VascValidator;
@ -67,6 +69,17 @@ public interface VascEntryFieldType extends Serializable {
public VascUIComponent provideEditorUIComponent(int index,VascEntryField entryField) throws VascException;
public VascValueModel provideEditorVascValueModel(int index,VascEntryField entryField) throws VascException;
/**
* @return the objectConverter
*/
public ObjectConverter getObjectConverter();
/**
* @param objectConverter the objectConverter to set
*/
public void setObjectConverter(ObjectConverter objectConverter);
/**
* Force impl to have public clone methode
* @return

View file

@ -35,4 +35,6 @@ public interface VascEntryFieldTypeController {
public VascEntryFieldType getVascEntryFieldTypeById(String id);
public List<String> getVascEntryFieldTypeIds();
public VascEntryFieldType getVascEntryFieldTypeByClass(Class<?> clazz);
}

View file

@ -26,6 +26,7 @@ import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascException;
/**
* VascOptionValueModelListener to handle editors which sets entry parameter values.
*
* @author Willem Cazander
* @version 1.0 May 21, 2009

View file

@ -24,21 +24,21 @@ package net.forwardfire.vasc.impl;
import java.util.Collections;
import java.util.Comparator;
import java.util.Locale;
import org.x4o.xml.conv.ObjectConverterException;
import net.forwardfire.vasc.backend.VascBackend;
import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascEntryFieldSet;
import net.forwardfire.vasc.core.VascEntryFieldType;
import net.forwardfire.vasc.core.VascEntryFinalizer;
import net.forwardfire.vasc.core.VascException;
import net.forwardfire.vasc.core.VascLinkEntry;
import net.forwardfire.vasc.core.VascLinkEntryType;
import net.forwardfire.vasc.core.actions.VascAction;
/**
* Checks for minimal needed stuff
* and fills up the rest.
@ -79,7 +79,7 @@ public class DefaultVascBackedEntryFinalizer implements VascEntryFinalizer {
// Check if backendId is valid
VascBackend back = vascController.getVascBackendController().getVascBackendById( entry.getBackendId() );
if (back==null) {
throw new IllegalArgumentException("The VascEntry backendId is not found in backends: '"+entry.getBackendId()+"' in entryId: "+id);
throw new IllegalArgumentException("The VascEntry backend is not found in backends: '"+entry.getBackendId()+"' in entryId: "+id);
}
@ -234,22 +234,17 @@ public class DefaultVascBackedEntryFinalizer implements VascEntryFinalizer {
vef.setEditReadOnly(false);
}
/* moved to fillVascEntryFrontend
if (vef.getVascEntryFieldValue()==null) {
VascBackend back2 = vascController.getVascBackendController().getVascBackendById( entry.getBackendId() );
vef.setVascEntryFieldValue(back2.provideVascEntryFieldValue(vef));
}
*/
if (vef.getVascEntryFieldType()==null) {
Object defValue = vef.getDefaultValue();
if (defValue != null) {
for (String typeId: vascController.getVascEntryFieldTypeController().getVascEntryFieldTypeIds()) {
VascEntryFieldType type = vascController.getVascEntryFieldTypeController().getVascEntryFieldTypeById(typeId);
Class<?> autoClass = type.getAutoDetectClass();
if (autoClass!=null && autoClass.isAssignableFrom(defValue.getClass())) {
vef.setVascEntryFieldType(type);
break;
}
}
vef.setVascEntryFieldType(vascController.getVascEntryFieldTypeController().getVascEntryFieldTypeByClass(defValue.getClass()));
}
if (vef.getVascEntryFieldType()==null) {
vef.setVascEntryFieldType(vascController.getVascEntryFieldTypeController().getVascEntryFieldTypeById("TextField"));
@ -257,6 +252,19 @@ public class DefaultVascBackedEntryFinalizer implements VascEntryFinalizer {
//vef.setStyleList("vasc.entry."+id+"."+vid+".styleEdit");
}
if (vef.getDefaultValue()!=null && vef.getDefaultValue() instanceof String) {
if (vef.getVascEntryFieldType().getObjectConverter() != null) {
Object value;
try {
value = vef.getVascEntryFieldType().getObjectConverter().convertTo(vef.getDefaultValue(), Locale.getDefault());
} catch (ObjectConverterException e) {
throw new VascException(e);
}
vef.setDefaultValue(value);
}
}
//for (VascValidator vv:vef.getVascValidators()) {
//}
}
@ -363,6 +371,18 @@ public class DefaultVascBackedEntryFinalizer implements VascEntryFinalizer {
//VascBackend back2 = vascController.getVascBackendControllerResolver().getVascBackendController().getVascBackendById( entry.getBackendId() );
//vef.setVascEntryFieldValue(back2.provideVascEntryFieldValue(vef));
}
if (vef.getDefaultValue()!=null && vef.getDefaultValue() instanceof String) {
if (vef.getVascEntryFieldType()!=null && vef.getVascEntryFieldType().getObjectConverter() != null) {
Object value;
try {
value = vef.getVascEntryFieldType().getObjectConverter().convertTo(vef.getDefaultValue(), Locale.getDefault());
} catch (ObjectConverterException e) {
throw new VascException(e);
}
vef.setDefaultValue(value);
}
}
}

View file

@ -22,7 +22,10 @@
package net.forwardfire.vasc.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.forwardfire.vasc.backend.VascBackend;
@ -62,5 +65,14 @@ public class DefaultVascBackendController implements VascBackendControllerLocal
}
backends.put(backend.getId(), backend);
}
public List<String> getVascBackendIds() {
List<String> result = new ArrayList<String>(50);
for (String id:backends.keySet()) {
result.add(id);
}
Collections.sort(result); // lets do abc for consistance behauvior.
return result;
}
}

View file

@ -824,6 +824,19 @@ public class DefaultVascEntry implements VascEntry {
return listOptions;
}
public VascEntryField getListOptionById(String listOptionId) {
for (VascEntryField vef:listOptions) {
if (vef.getId().equals(listOptionId)) {
return vef;
}
}
return null;
}
public void removeListOption(VascEntryField listOption) {
listOptions.remove(listOption);
}
public void addVascBackendFilter(VascBackendFilter filter) {
backendFilters.add(filter);

View file

@ -37,7 +37,9 @@ import net.forwardfire.vasc.backend.proxy.VascBackendProxyTimerLogger;
import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryControllerLocal;
import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascException;
import net.forwardfire.vasc.core.entry.VascEntryFieldValue;
import net.forwardfire.vasc.frontend.VascFrontendData;
import net.forwardfire.vasc.impl.actions.AddRowAction;
import net.forwardfire.vasc.impl.actions.CSVExportGlobalAction;
@ -139,20 +141,26 @@ public class DefaultVascFactory {
static public void fillVascControllerLocalEntries(VascEntryControllerLocal c,VascController con) throws VascException {
for (String id:c.getVascEntryIds()) {
VascEntry entry = c.getMasterVascEntryById(id);
if (entry.isVascDisplayOnly()==false) {
if (entry.isVascAdminCreate()) {
entry.addRowAction(new AddRowAction());
// hackje for calling multiple times on same entries.
if (entry.getGlobalActionById(XMLExportGlobalAction.ACTION_ID)==null) {
if (entry.isVascDisplayOnly()==false) {
if (entry.isVascAdminCreate()) {
entry.addRowAction(new AddRowAction());
}
if (entry.isVascAdminEdit()) {
entry.addRowAction(new EditRowAction());
}
if (entry.isVascAdminDelete()) {
entry.addRowAction(new DeleteRowAction());
}
}
if (entry.isVascAdminEdit()) {
entry.addRowAction(new EditRowAction());
}
if (entry.isVascAdminDelete()) {
entry.addRowAction(new DeleteRowAction());
}
}
entry.addGlobalAction(new XMLExportGlobalAction());
entry.addGlobalAction(new CSVExportGlobalAction());
entry.addGlobalAction(new RefreshDataGlobalAction());
entry.addGlobalAction(new XMLExportGlobalAction());
entry.addGlobalAction(new CSVExportGlobalAction());
entry.addGlobalAction(new RefreshDataGlobalAction());
}
/*
DefaultVascEntryResourceResolver t = new DefaultVascEntryResourceResolver(resourceBundle);
@ -208,6 +216,14 @@ public class DefaultVascFactory {
VascBackend backend = DefaultVascFactory.getProxyVascBackend(entry);
frontendData.getVascEntryState().setVascBackend(backend);
frontendData.getVascEntryState().setVascEntry(entry);
for (VascEntryField field:entry.getVascEntryFields()) {
if (field.getVascEntryFieldValue()==null) {
VascEntryFieldValue v = backend.provideVascEntryFieldValue(field);
field.setVascEntryFieldValue(v);
}
}
frontendData.setVascFrontendPager(new DefaultVascFrontendPager(entry));
frontendData.setVascFrontendActions(new DefaultVascFrontendActions(entry));
}

View file

@ -26,6 +26,7 @@ import java.util.Date;
import java.util.logging.Logger;
import net.forwardfire.vasc.backend.VascBackendFilter;
import net.forwardfire.vasc.backend.VascBackendState;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascException;
@ -170,21 +171,33 @@ public class DefaultVascFrontendActions implements VascFrontendActions {
public void refreshData() {
entry.getVascFrontendData().fireVascFrontendEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.PRE_READ, null);
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(null);
VascBackendState backendState = entry.getVascFrontendData().getVascEntryState().getVascBackendState();
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());
if (backendState.getPageSize() > backendState.getPageSizeMax()) {
backendState.setPageSize(backendState.getPageSizeMax());
}
// Sets parameters to backend state
for (String key:entry.getEntryParameterKeys()) {
Object value = entry.getEntryParameter(key);
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setDataParameter(key, value);
}
entry.getVascFrontendData().getVascEntryState().setEntryDataList(entry.getVascFrontendData().getVascEntryState().getVascBackend().execute(entry.getVascFrontendData().getVascEntryState().getVascBackendState()));
backendState.setDataParameter(key, value);
}
// also update total every time
Long total = entry.getVascFrontendData().getVascEntryState().getVascBackend().fetchTotalExecuteSize(entry.getVascFrontendData().getVascEntryState().getVascBackendState());
// Execute to get data.
entry.getVascFrontendData().getVascEntryState().setEntryDataList(entry.getVascFrontendData().getVascEntryState().getVascBackend().execute(backendState));
// Update total every time first
Long total = entry.getVascFrontendData().getVascEntryState().getVascBackend().fetchTotalExecuteSize(backendState);
entry.getVascFrontendData().getVascEntryState().setTotalBackendRecords(total);
// check if we need to change the current page
int pages = new Long(total/backendState.getPageSize()).intValue();
if (backendState.getPageIndex() > pages) {
backendState.setPageIndex(pages);
entry.getVascFrontendData().getVascEntryState().setEntryDataList(entry.getVascFrontendData().getVascEntryState().getVascBackend().execute(backendState));
}
} catch (Exception e) {
entry.getVascFrontendData().getVascFrontendHelper().handleException(entry, e);
}

View file

@ -26,8 +26,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import net.forwardfire.vasc.backend.VascBackendPageNumber;
import net.forwardfire.vasc.backend.VascBackendState;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascException;
@ -42,8 +40,6 @@ import net.forwardfire.vasc.core.entry.VascEntryFrontendEventListener.VascFronte
import net.forwardfire.vasc.core.ui.VascUIComponent;
import net.forwardfire.vasc.frontend.VascFrontendHelper;
/**
*
* @author Willem Cazander

View file

@ -148,7 +148,7 @@ public class DefaultVascFrontendPager implements VascFrontendPager {
if (total==null) {
return result; // no pages
}
int pages = new Long(total/state.getPageSize()).intValue();
int pages = new Long(total/state.getPageSize()).intValue();
for (int i=0;i<=pages;i++) {
VascBackendPageNumber pn = new VascBackendPageNumber(i);
if (state.getPageIndex()==i) {

View file

@ -40,6 +40,9 @@ public class DefaultVascEntryFieldType extends AbstractVascEntryFieldType {
public VascEntryFieldType clone() throws CloneNotSupportedException {
DefaultVascEntryFieldType clone = new DefaultVascEntryFieldType();
clone.id=id;
if (objectConverter!=null) {
clone.objectConverter=objectConverter.clone();
}
clone.autoDetectClass=autoDetectClass;
clone.uiComponentId=uiComponentId;
clone.inputMask=inputMask;

View file

@ -100,4 +100,16 @@ public class DefaultVascEntryFieldTypeController implements VascEntryFieldTypeCo
Collections.sort(result); // lets do abc for consistance behauvior.
return result;
}
public VascEntryFieldType getVascEntryFieldTypeByClass(Class<?> clazz) {
for (String typeId: vascEntryFieldTypes.keySet()) {
VascEntryFieldType type = getVascEntryFieldTypeById(typeId);
Class<?> autoClass = type.getAutoDetectClass();
if (autoClass!=null && autoClass.isAssignableFrom(clazz)) {
return type;
}
}
return null;
}
}

View file

@ -33,6 +33,8 @@ import net.forwardfire.vasc.core.VascEntryFieldType;
import org.xml.sax.SAXException;
import org.x4o.xml.conv.DefaultObjectConverterProvider;
import org.x4o.xml.conv.ObjectConverter;
import org.x4o.xml.core.X4OParser;
import org.x4o.xml.element.Element;
@ -63,8 +65,13 @@ public class FieldTypeParser extends X4OParser {
public List<VascEntryFieldType> getTypes() {
List<VascEntryFieldType> result = new ArrayList<VascEntryFieldType>(4);
DefaultObjectConverterProvider convProvider = new DefaultObjectConverterProvider(true);
for (Element e:getElementContext().getRootElement().getChilderen()) {
VascEntryFieldType a = (VascEntryFieldType)e.getElementObject();
if (a.getObjectConverter()==null && a.getAutoDetectClass()!=null) {
ObjectConverter conv = convProvider.getObjectConverterForClass(a.getAutoDetectClass());
a.setObjectConverter(conv); // move to x4o or finalizer
}
result.add(a);
}
return result;

View file

@ -43,6 +43,7 @@ public class VascSelectItemModelStringEnum implements VascSelectItemModel {
private static final long serialVersionUID = 1L;
private Object data = null;
private Class<?> enumClass = null;
private String nullLabel = null;
private String nullKeyValue = null;
private Boolean returnKeyValue = null;
@ -54,6 +55,12 @@ public class VascSelectItemModelStringEnum implements VascSelectItemModel {
public List<VascSelectItem> getVascSelectItems(VascEntry currentEntry) throws VascException {
List<VascSelectItem> result = new ArrayList<VascSelectItem>(100);
if (enumClass!=null) {
for (Object o:enumClass.getEnumConstants()) {
String value = o.toString();
result.add(new VascSelectItem(value,value,value));
}
}
if (data==null) {
return result;
}
@ -143,4 +150,18 @@ public class VascSelectItemModelStringEnum implements VascSelectItemModel {
public void setUseParentFields(Boolean useParentFields) {
this.useParentFields = useParentFields;
}
/**
* @return the enumClass
*/
public Class<?> getEnumClass() {
return enumClass;
}
/**
* @param enumClass the enumClass to set
*/
public void setEnumClass(Class<?> enumClass) {
this.enumClass = enumClass;
}
}

View file

@ -16,7 +16,7 @@
<eld:elementRefectionBindingHandler parentClass="net.forwardfire.vasc.core.VascEntryFieldType"
childClass="net.forwardfire.vasc.validators.VascValidator"
method="addVascValidator"/>
<eld:elementClass tag="dateFutureValidator" objectClassName="net.forwardfire.vasc.validators.VascDateFutureValidator"/>
<eld:elementClass tag="datePastValidator" objectClassName="net.forwardfire.vasc.validators.VascDatePastValidator"/>
<eld:elementClass tag="intSizeValidator" objectClassName="net.forwardfire.vasc.validators.VascIntSizeValidator"/>
@ -28,4 +28,27 @@
<eld:elementClass tag="stringRegexValidator" objectClassName="net.forwardfire.vasc.validators.VascStringRegexValidator"/>
<eld:elementClass tag="stringZipCodeValidator" objectClassName="net.forwardfire.vasc.validators.VascStringZipCodeValidator"/>
<eld:elementRefectionBindingHandler parentClass="net.forwardfire.vasc.core.VascEntryFieldType"
childClass="org.x4o.xml.conv.ObjectConverter"
method="setObjectConverter"/>
<eld:elementRefectionBindingHandler parentClass="org.x4o.xml.conv.ObjectConverter"
childClass="org.x4o.xml.conv.ObjectConverter"
method="addObjectConverter"/>
<eld:elementClass tag="beanConverter" elementClassName="org.x4o.xml.impl.lang.BeanElement"
description="Define an loadable in bean.class for an ObjectConverter."
/>
<eld:elementClass tag="booleanConverter" objectClassName="org.x4o.xml.conv.text.BooleanConverter" />
<eld:elementClass tag="byteConverter" objectClassName="org.x4o.xml.conv.text.ByteConverter" />
<eld:elementClass tag="characterConverter" objectClassName="org.x4o.xml.conv.text.CharacterConverter" />
<eld:elementClass tag="doubleConverter" objectClassName="org.x4o.xml.conv.text.DoubleConverter" />
<eld:elementClass tag="floatConverter" objectClassName="org.x4o.xml.conv.text.FloatConverter" />
<eld:elementClass tag="IntegerConverter" objectClassName="org.x4o.xml.conv.text.IntegerConverter" />
<eld:elementClass tag="LongConverter" objectClassName="org.x4o.xml.conv.text.LongConverter" />
<eld:elementClass tag="UrlConverter" objectClassName="org.x4o.xml.conv.text.URLConverter" />
<eld:elementClass tag="ClassConverter" objectClassName="org.x4o.xml.conv.text.ClassConverter" />
<eld:elementClass tag="EnumConverter" objectClassName="org.x4o.xml.conv.text.EnumConverter" />
</eld:root>

View file

@ -3,7 +3,7 @@
<eld:elementRefectionBindingHandler parentClass="net.forwardfire.vasc.core.VascEntry" childClass="net.forwardfire.vasc.core.VascEntryFieldSet" method="addVascEntryFieldSet"/>
<eld:elementRefectionBindingHandler parentClass="net.forwardfire.vasc.core.VascEntry" childClass="net.forwardfire.vasc.core.VascLinkEntry" method="addVascLinkEntry"/>
<eld:elementRefectionBindingHandler parentClass="net.forwardfire.vasc.core.VascEntry" childClass="net.forwardfire.vasc.core.VascBackendFilter" method="addVascBackendFilter"/>
<eld:elementRefectionBindingHandler parentClass="net.forwardfire.vasc.core.VascEntry" childClass="net.forwardfire.vasc.backend.VascBackendFilter" method="addVascBackendFilter"/>
<eld:elementRefectionBindingHandler parentClass="net.forwardfire.vasc.core.VascEntry" childClass="net.forwardfire.vasc.core.actions.GlobalVascAction" method="addGlobalAction"/>
<eld:elementRefectionBindingHandler parentClass="net.forwardfire.vasc.core.VascEntry" childClass="net.forwardfire.vasc.core.actions.RowVascAction" method="addRowAction"/>
<eld:elementRefectionBindingHandler parentClass="net.forwardfire.vasc.core.VascEntry" childClass="net.forwardfire.vasc.core.actions.ColumnVascAction" method="addColumnAction"/>
@ -32,7 +32,11 @@
<eld:elementClass tag="vascSelectItemEntryParameter" elementClassName="net.forwardfire.vasc.impl.x4o.VascLinkEntryParameterElement"/>
<eld:elementClass tag="vascSelectItemModelString" objectClassName="net.forwardfire.vasc.impl.ui.VascSelectItemModelStringEnum"/>
<eld:elementClass tag="vascSelectItemModelEnum" objectClassName="net.forwardfire.vasc.impl.ui.VascSelectItemModelStringEnum"/>
<eld:elementClass tag="vascSelectItemModelEnum" objectClassName="net.forwardfire.vasc.impl.ui.VascSelectItemModelStringEnum">
<eld:elementClassAttribute attributeName="enumClass">
<eld:attributeClassConverter/>
</eld:elementClassAttribute>
</eld:elementClass>
<eld:elementClass tag="fieldSet" objectClassName="net.forwardfire.vasc.impl.DefaultVascEntryFieldSet" elementClassName="net.forwardfire.vasc.impl.x4o.VascEntryFieldSetElement">
@ -71,4 +75,8 @@
<eld:elementClass tag="stringZipCodeValidator" objectClassName="net.forwardfire.vasc.validators.VascStringZipCodeValidator"/>
<eld:elementClass tag="virtualVascBackend" objectClassName="net.forwardfire.vasc.backend.VirtualVascBackend">
<eld:elementConfigurator bean.class="net.forwardfire.vasc.impl.x4o.VascBackendElementConfigurator" configAction="true"/>
</eld:elementClass>
</eld:root>