Made unittest data backend for frontends and improved swing frontend.
Worked on metamodel backend and some other fixes.
This commit is contained in:
parent
1c308a684a
commit
a25e98f5d5
65 changed files with 2820 additions and 499 deletions
|
|
@ -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()
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -35,4 +35,6 @@ public interface VascEntryFieldTypeController {
|
|||
public VascEntryFieldType getVascEntryFieldTypeById(String id);
|
||||
|
||||
public List<String> getVascEntryFieldTypeIds();
|
||||
|
||||
public VascEntryFieldType getVascEntryFieldTypeByClass(Class<?> clazz);
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue