2
0
Fork 0

added empty files and fixed a little

This commit is contained in:
willem.cazander 2010-09-25 18:42:09 +02:00
parent d6d77072d9
commit 3d0d609462
43 changed files with 944 additions and 373 deletions

View file

@ -41,5 +41,6 @@ import java.lang.annotation.Target;
@Target(ElementType.TYPE)
public @interface VascEventListener {
Class<?>[] listeners();
String[] backendEventListeners();
String[] frontendEventListeners();
}

View file

@ -32,9 +32,7 @@ import java.util.List;
import com.idcanet.vasc.core.actions.ColumnVascAction;
import com.idcanet.vasc.core.actions.GlobalVascAction;
import com.idcanet.vasc.core.actions.RowVascAction;
import com.idcanet.vasc.core.entry.VascEntryBackendEventListener;
import com.idcanet.vasc.core.entry.VascEntryFieldEventChannel;
import com.idcanet.vasc.core.entry.VascEntryFrontendEventListener;
/**
* The main vasc entry
@ -383,25 +381,25 @@ public interface VascEntry extends Cloneable,Serializable {
* Added an VascEntryBackendEventListener
* @param listener The class of the event listener.
*/
public void addVascEntryBackendEventListener(Class<VascEntryBackendEventListener> listener);
public void addVascEntryBackendEventListener(String listener);
/**
* Returns the list of VascEntryBackendEventListener
* @return
*/
public List<Class<VascEntryBackendEventListener>> getVascEntryBackendEventListeners();
public List<String> getVascEntryBackendEventListeners();
/**
* Added an VascEntryFrontendEventListener
* @param listener The class of the event listener.
*/
public void addVascEntryFrontendEventListener(Class<VascEntryFrontendEventListener> listener);
public void addVascEntryFrontendEventListener(String listener);
/**
* Returns the list of VascEntryFrontendEventListener
* @return
*/
public List<Class<VascEntryFrontendEventListener>> getVascEntryFrontendEventListeners();
public List<String> getVascEntryFrontendEventListeners();
public void addListOption(VascEntryField listOption);

View file

@ -39,18 +39,28 @@ import com.idcanet.vasc.core.VascEntry;
public interface VascEntryBackendEventListener extends Serializable {
public enum VascBackendEventType {
EXECUTE,
PERSIST,
MERGE,
DELETE,
PROVIDE_FIELD_VALUE,
PROVIDE_RECORD_CREATOR,
TOTAL_EXECUTE_SIZE,
MOVE_DOWN,
MOVE_UP
PRE_EXECUTE,
PRE_PERSIST,
PRE_MERGE,
PRE_DELETE,
PRE_PROVIDE_FIELD_VALUE,
PRE_PROVIDE_RECORD_CREATOR,
PRE_TOTAL_EXECUTE_SIZE,
PRE_MOVE_DOWN,
PRE_MOVE_UP,
POST_EXECUTE,
POST_PERSIST,
POST_MERGE,
POST_DELETE,
POST_PROVIDE_FIELD_VALUE,
POST_PROVIDE_RECORD_CREATOR,
POST_TOTAL_EXECUTE_SIZE,
POST_MOVE_DOWN,
POST_MOVE_UP
}
public VascBackendEventType getEventType();
public VascBackendEventType[] getEventType();
/**
* Is executed when the type of event is fired.

View file

@ -41,17 +41,19 @@ public interface VascEntryFrontendEventListener extends Serializable {
public enum VascFrontendEventType {
EXCEPTION,
DATA_CREATE,
DATA_READ,
DATA_SELECT,
DATA_PRE_UPDATE,
DATA_POST_UPDATE,
DATA_DELETE,
DATA_LIST_UPDATE,
PRE_CREATE,
POST_CREATE,
PRE_READ,
POST_READ,
PRE_UPDATE,
POST_UPDATE,
PRE_DELETE,
POST_DELETE,
DATA_SORT,
DATA_PAGE,
DATA_SEARCH,
SELECT,
SORT,
PAGE,
SEARCH,
OPTION_UPDATE,
}

View file

@ -87,8 +87,8 @@ public class DefaultVascEntry implements VascEntry {
private List<VascLinkEntry> vascLinkEntries = null;
private Map<String,Object> entryParameters = null;
private VascEntryFieldEventChannel vascEntryFieldEventChannel = null;
private List<Class<VascEntryFrontendEventListener>> eventEntryFrontendEventListeners = null;
private List<Class<VascEntryBackendEventListener>> eventEntryBackendEventListeners = null;
private List<String> eventEntryFrontendEventListeners = null;
private List<String> eventEntryBackendEventListeners = null;
private List<VascEntryField> listOptions = null;
private List<VascBackendFilter> backendFilters = null;
@ -109,8 +109,8 @@ public class DefaultVascEntry implements VascEntry {
vascLinkEntries = new ArrayList<VascLinkEntry>(10);
entryParameters = new HashMap<String,Object>(10);
eventEntryFrontendEventListeners = new ArrayList<Class<VascEntryFrontendEventListener>>(10);
eventEntryBackendEventListeners = new ArrayList<Class<VascEntryBackendEventListener>>(10);
eventEntryFrontendEventListeners = new ArrayList<String>(10);
eventEntryBackendEventListeners = new ArrayList<String>(10);
listOptions = new ArrayList<VascEntryField>(5);
backendFilters = new ArrayList<VascBackendFilter>(3);
}
@ -720,7 +720,7 @@ public class DefaultVascEntry implements VascEntry {
* Added an VascEntryBackendEventListener
* @param listener The class of the event listener.
*/
public void addVascEntryBackendEventListener(Class<VascEntryBackendEventListener> listener) {
public void addVascEntryBackendEventListener(String listener) {
eventEntryBackendEventListeners.add(listener);
}
@ -728,7 +728,7 @@ public class DefaultVascEntry implements VascEntry {
* Returns the list of VascEntryBackendEventListener
* @return
*/
public List<Class<VascEntryBackendEventListener>> getVascEntryBackendEventListeners() {
public List<String> getVascEntryBackendEventListeners() {
return eventEntryBackendEventListeners;
}
@ -736,7 +736,7 @@ public class DefaultVascEntry implements VascEntry {
* Added an VascEntryFrontendEventListener
* @param listener The class of the event listener.
*/
public void addVascEntryFrontendEventListener(Class<VascEntryFrontendEventListener> listener) {
public void addVascEntryFrontendEventListener(String listener) {
eventEntryFrontendEventListeners.add(listener);
}
@ -744,7 +744,7 @@ public class DefaultVascEntry implements VascEntry {
* Returns the list of VascEntryFrontendEventListener
* @return
*/
public List<Class<VascEntryFrontendEventListener>> getVascEntryFrontendEventListeners() {
public List<String> getVascEntryFrontendEventListeners() {
return eventEntryFrontendEventListeners;
}

View file

@ -35,6 +35,7 @@ import com.idcanet.vasc.core.VascController;
import com.idcanet.vasc.core.VascEntry;
import com.idcanet.vasc.core.VascException;
import com.idcanet.vasc.core.VascFrontendData;
import com.idcanet.vasc.core.entry.VascEntryFrontendEventListener;
import com.idcanet.vasc.impl.entry.DefaultVascEntryResourceResolver;
import com.idcanet.vasc.impl.entry.VascValidatorsValidatorService;
import com.idcanet.vasc.impl.type.DefaultVascEntryFieldTypeController;
@ -86,8 +87,13 @@ public class DefaultVascFactory {
return vascFrontendData;
}
/**
* Gets a backend of the backend controller and addes all the proxy classes.
* @param entry
* @return
*/
static public VascBackend getProxyVascBackend(VascEntry entry) {
// Get the real backend
// Get the 'real' backend
VascBackend backend = entry.getVascFrontendData().getVascController().getVascBackendController().getVascBackendById(entry.getBackendId());
// logs all actions log logger
@ -109,6 +115,11 @@ public class DefaultVascFactory {
if (backend.isPageable()==false) {
backend = new VascBackendProxyPaged(backend,entry);
}
// execute backend event listeners
backend = new VascBackendProxyEventExecutor(backend,entry);
// return the configed backend.
return backend;
}
}

View file

@ -248,8 +248,17 @@ public class DefaultVascFrontendData implements VascFrontendData {
public void initFrontendListeners(VascEntry entry) throws InstantiationException, IllegalAccessException {
for (Class<VascEntryFrontendEventListener> clazz:entry.getVascEntryFrontendEventListeners()) {
VascEntryFrontendEventListener listener = clazz.newInstance();
ClassLoader cl = Thread.currentThread().getContextClassLoader();
if (cl==null) {
cl = entry.getClass().getClassLoader();
}
for (String clazz:entry.getVascEntryFrontendEventListeners()) {
VascEntryFrontendEventListener listener;
try {
listener = (VascEntryFrontendEventListener)cl.loadClass(clazz).newInstance();
} catch (ClassNotFoundException e) {
throw new RuntimeException("Could not load VascEntryFrontendEventListener of: "+clazz);
}
addVascEntryFrontendEventListener(listener);
}
}

View file

@ -230,6 +230,7 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
*/
public Object createObject(VascEntry entry) {
try {
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.PRE_CREATE, null);
Object object = entry.getVascFrontendData().getVascEntryState().getVascBackend().provideVascEntryRecordCreator(entry.clone()).newRecord(entry);
if (object==null) {
throw new IllegalStateException("Can't work with null object for backend storage.");
@ -252,7 +253,7 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
logger.finer("Setting default value for: "+field.getName()+" def: "+defaultValue);
field.getVascEntryFieldValue().setValue(field, object, defaultValue);
}
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_CREATE, object);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.POST_CREATE, object);
return object;
} catch (Exception e) {
handleException(entry,e);
@ -301,7 +302,7 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
Object object = entry.getVascFrontendData().getVascEntryState().getEntryDataObject();
Object result = null;
try {
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_PRE_UPDATE,object);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.PRE_UPDATE,object);
int index = removeObjectFromDataList(entry,object);
// merge object on backend
@ -315,8 +316,7 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
// put object back in list
entry.getVascFrontendData().getVascEntryState().getEntryDataList().add(index, result);
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(null);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_POST_UPDATE,result);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_LIST_UPDATE,result);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.POST_UPDATE,result);
} catch (Exception e) {
handleException(entry,e);
}
@ -330,6 +330,7 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
*/
public void deleteObject(VascEntry entry) {
Object object = entry.getVascFrontendData().getVascEntryState().getEntryDataObject();
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.PRE_DELETE, object);
try {
entry.getVascFrontendData().getVascEntryState().getVascBackend().delete(object);
} catch (Exception e) {
@ -337,14 +338,14 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
}
removeObjectFromDataList(entry,object);
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(null);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_DELETE, object);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_LIST_UPDATE, object);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.POST_DELETE, object);
}
/**
* @see com.idcanet.vasc.core.VascFrontendHelper#refreshData(com.idcanet.vasc.core.VascEntry)
*/
public void refreshData(VascEntry entry) {
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.PRE_READ, null);
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(null);
try {
// check and correct max page size
@ -364,8 +365,7 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
} catch (Exception e) {
handleException(entry, e);
}
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_READ, null);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_LIST_UPDATE, null);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.POST_READ, null);
}
public void headerOptionsCreatedFillData(VascEntry entry) {
@ -474,7 +474,7 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
String sortID = field.getBackendName();
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setSortField(sortID);
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setPageIndex(0);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_SORT, field);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.SORT, field);
refreshData(entry);
}
@ -483,7 +483,7 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setSearchString(searchString);
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setSortField(null);
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setPageIndex(0);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_SEARCH, searchString);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.SEARCH, searchString);
refreshData(entry);
}
@ -498,7 +498,7 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
}
entry.getVascFrontendData().getVascEntryState().getVascBackendState().setPageIndex(pageIndex);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.DATA_PAGE, pageIndex);
fireVascEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.PAGE, pageIndex);
// lets load data;
refreshData(entry);

View file

@ -0,0 +1,152 @@
/*
* Copyright 2004-2010 IDCA. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
* following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and
* the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
* and the following disclaimer in the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED BY IDCA AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL IDCA OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the authors and
* should not be interpreted as representing official policies, either expressed or implied, of IDCA.
*/
package com.idcanet.vasc.impl;
import java.util.ArrayList;
import java.util.List;
import com.idcanet.vasc.core.AbstractVascBackendProxy;
import com.idcanet.vasc.core.VascBackend;
import com.idcanet.vasc.core.VascBackendState;
import com.idcanet.vasc.core.VascEntry;
import com.idcanet.vasc.core.VascException;
import com.idcanet.vasc.core.entry.VascEntryBackendEventListener;
import com.idcanet.vasc.core.entry.VascEntryBackendEventListener.VascBackendEventType;
/**
* Holds !! and fires the backend event listeners.
*
* @author Willem Cazander
* @version 1.0 Sep 21, 2010
*/
public class VascBackendProxyEventExecutor extends AbstractVascBackendProxy {
private List<VascEntryBackendEventListener> listeners = null;
private VascEntry entry = null;
public VascBackendProxyEventExecutor(VascBackend backend,VascEntry entry) {
super(backend);
this.entry=entry;
this.listeners=new ArrayList<VascEntryBackendEventListener>(10);
ClassLoader cl = Thread.currentThread().getContextClassLoader();
if (cl==null) {
cl = entry.getClass().getClassLoader();
}
for (String clazz:entry.getVascEntryBackendEventListeners()) {
VascEntryBackendEventListener listener;
try {
listener = (VascEntryBackendEventListener)cl.loadClass(clazz).newInstance();
} catch (Exception e) {
throw new RuntimeException("Could not load VascEntryBackendEventListener of: "+clazz);
}
listeners.add(listener);
}
}
private void fireVascEvent(VascBackendEventType type, Object data) {
for (int i=0;i<listeners.size();i++) {
VascEntryBackendEventListener l = listeners.get(i);
l.vascEvent(entry, data);
}
}
/**
* @see com.idcanet.vasc.core.AbstractVascBackendProxy#delete(java.lang.Object)
*/
@Override
public void delete(Object object) throws VascException {
fireVascEvent(VascBackendEventType.PRE_DELETE,object);
super.delete(object);
fireVascEvent(VascBackendEventType.POST_DELETE,object);
}
/**
* @see com.idcanet.vasc.core.AbstractVascBackendProxy#doRecordMoveDownById(com.idcanet.vasc.core.VascBackendState, java.lang.Object)
*/
@Override
public long doRecordMoveDownById(VascBackendState state, Object primaryId) throws VascException {
fireVascEvent(VascBackendEventType.PRE_MOVE_DOWN,primaryId);
Long result = super.doRecordMoveDownById(state, primaryId);
fireVascEvent(VascBackendEventType.POST_MOVE_DOWN,result);
return result;
}
/**
* @see com.idcanet.vasc.core.AbstractVascBackendProxy#doRecordMoveUpById(com.idcanet.vasc.core.VascBackendState, java.lang.Object)
*/
@Override
public long doRecordMoveUpById(VascBackendState state, Object primaryId) throws VascException {
fireVascEvent(VascBackendEventType.PRE_MOVE_UP,primaryId);
Long result = super.doRecordMoveUpById(state, primaryId);
fireVascEvent(VascBackendEventType.POST_MOVE_UP,result);
return result;
}
/**
* @see com.idcanet.vasc.core.AbstractVascBackendProxy#execute(com.idcanet.vasc.core.VascBackendState)
*/
@Override
public List<Object> execute(VascBackendState state) throws VascException {
fireVascEvent(VascBackendEventType.PRE_EXECUTE,state);
List<Object> result = super.execute(state);
fireVascEvent(VascBackendEventType.POST_EXECUTE,result);
return result;
}
/**
* @see com.idcanet.vasc.core.AbstractVascBackendProxy#fetchTotalExecuteSize(com.idcanet.vasc.core.VascBackendState)
*/
@Override
public long fetchTotalExecuteSize(VascBackendState state) {
fireVascEvent(VascBackendEventType.PRE_TOTAL_EXECUTE_SIZE,state);
Long result = super.fetchTotalExecuteSize(state);
fireVascEvent(VascBackendEventType.POST_TOTAL_EXECUTE_SIZE,result);
return result;
}
/**
* @see com.idcanet.vasc.core.AbstractVascBackendProxy#merge(java.lang.Object)
*/
@Override
public Object merge(Object object) throws VascException {
fireVascEvent(VascBackendEventType.PRE_MERGE,object);
Object result = super.merge(object);
fireVascEvent(VascBackendEventType.POST_MERGE,result);
return result;
}
/**
* @see com.idcanet.vasc.core.AbstractVascBackendProxy#persist(java.lang.Object)
*/
@Override
public void persist(Object object) throws VascException {
fireVascEvent(VascBackendEventType.PRE_PERSIST,object);
super.persist(object);
fireVascEvent(VascBackendEventType.POST_PERSIST,object);
}
}

View file

@ -51,7 +51,7 @@ public class EditRowAction extends AbstractVascAction implements RowVascAction {
return; // nothing selected
}
entry.getVascFrontendData().getVascEntryState().setEditCreate(false);
entry.getVascFrontendData().getVascFrontendHelper().fireVascEvent(entry, VascFrontendEventType.DATA_SELECT, rowObject);
entry.getVascFrontendData().getVascFrontendHelper().fireVascEvent(entry, VascFrontendEventType.SELECT, rowObject);
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(rowObject);
entry.getVascFrontendData().getVascFrontend().renderEdit();
}

View file

@ -45,8 +45,6 @@ import com.idcanet.vasc.core.VascController;
import com.idcanet.vasc.core.VascEntry;
import com.idcanet.vasc.core.VascEntryField;
import com.idcanet.vasc.core.VascEntryFieldType;
import com.idcanet.vasc.core.entry.VascEntryBackendEventListener;
import com.idcanet.vasc.core.entry.VascEntryFrontendEventListener;
import com.idcanet.vasc.impl.DefaultVascEntryField;
import com.idcanet.vasc.validators.VascValidator;
import com.idcanet.vasc.validators.VascValidatorClassParser;
@ -104,7 +102,6 @@ public class AnnotationParserElement extends AbstractElement {
}
}
@SuppressWarnings("unchecked")
private void fillEntry(VascEntry entry,Class<?> modelClass,VascAnnotationParser parser) throws ElementException {
@ -114,15 +111,11 @@ public class AnnotationParserElement extends AbstractElement {
VascEventListener vc = parser.getVascEventListener(modelClass);
if (vc!=null) {
int i = 0;
for (Class<?> listener:vc.listeners()) {
if (listener.isAssignableFrom(VascEntryFrontendEventListener.class)) {
entry.addVascEntryFrontendEventListener((Class<VascEntryFrontendEventListener>)listener);
}
if (listener.isAssignableFrom(VascEntryBackendEventListener.class)) {
entry.addVascEntryBackendEventListener((Class<VascEntryBackendEventListener>)listener);
}
i++;
for (String listener:vc.frontendEventListeners()) {
entry.addVascEntryFrontendEventListener(listener);
}
for (String listener:vc.backendEventListeners()) {
entry.addVascEntryBackendEventListener(listener);
}
}

View file