2
0
Fork 0

WIP: left over open files for long...

This commit is contained in:
Willem 2017-06-10 02:22:01 +02:00
parent 0a2398c5c1
commit 76aa74990e
165 changed files with 4299 additions and 3373 deletions

View file

@ -1,142 +0,0 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.backend;
import java.io.Serializable;
/**
* AbstractVascBackend.
*
*
* @author Willem Cazander
* @version 1.0 Aug 2, 2007
*/
abstract public class AbstractVascBackend<DATA_OBJECT extends Serializable> implements VascBackend<DATA_OBJECT> {
private String id = null;
/**
* @see net.forwardfire.vasc.backend.VascBackend#getId()
*/
@Override
public String getId() {
return id;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#setId(java.lang.String)
*/
@Override
public void setId(String id) {
if (id==null) {
throw new IllegalArgumentException("id may not be null");
}
this.id=id;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#startBackend()
*/
@Override
public void startBackend() {
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#stopBackend()
*/
@Override
public void stopBackend() {
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#isReadOnly()
*/
@Override
public boolean isReadOnly() {
return false;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#isPageable()
*/
@Override
public boolean isPageable() {
return false;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#isSearchable()
*/
@Override
public boolean isSearchable() {
return false;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#isSortable()
*/
@Override
public boolean isSortable() {
return false;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#isRecordMoveable()
*/
@Override
public boolean isRecordMoveable() {
return false;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#doRecordMoveDownById(java.lang.Object)
*/
@Override
public long doRecordMoveDownById(VascBackendState state,Object primaryId) throws VascBackendException {
return 0l;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#doRecordMoveUpById(java.lang.Object)
*/
@Override
public long doRecordMoveUpById(VascBackendState state,Object primaryId) throws VascBackendException {
return 0l;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#hasPageSummary()
*/
@Override
public boolean hasPageSummary() {
return false;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#hasTotalSummary()
*/
@Override
public boolean hasTotalSummary() {
return false;
}
}

View file

@ -22,14 +22,12 @@
package net.forwardfire.vasc.backend;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* AbstractVascBackendControllerLocal
*
@ -38,18 +36,16 @@ import java.util.Map;
*/
abstract public class AbstractVascBackendControllerLocal implements VascBackendControllerLocal {
private Map<String,VascBackend<Serializable>> backends = null;
private Map<String,VascBackend> backends = null;
public AbstractVascBackendControllerLocal() {
backends = new HashMap<String,VascBackend<Serializable>>(1000);
backends = new HashMap<String,VascBackend>(1000);
}
/**
* @see net.forwardfire.vasc.backend.VascBackendController#getVascBackendById(java.lang.String)
*/
@Override
public VascBackend<Serializable> getVascBackendById(String id) {
return backends.get(id);
@SuppressWarnings("unchecked")
public <BACKEND_TYPE extends VascBackend> BACKEND_TYPE getVascBackendById(Class<BACKEND_TYPE> clazz,String id) {
return (BACKEND_TYPE) backends.get(id);
}
/**
@ -64,44 +60,49 @@ abstract public class AbstractVascBackendControllerLocal implements VascBackendC
Collections.sort(result); // lets do abc for consistance behauvior.
return result;
}
/**
* @see net.forwardfire.vasc.backend.VascBackendControllerLocal#addVascBackend(net.forwardfire.vasc.backend.VascBackend)
* @see net.forwardfire.vasc.backend.VascBackendControllerLocal#addVascBackend(net.forwardfire.vasc.backend.crud.VascBackendCrud)
*/
@SuppressWarnings("unchecked")
@Override
public void addVascBackend(VascBackend<? extends Serializable> backend) {
public void addVascBackend(VascBackend backend) {
if (backend==null) {
throw new NullPointerException("backend must not be null.");
}
if (backend.getId()==null) {
throw new IllegalArgumentException("The backend must have an id.");
}
backend.startBackend();
VascBackend<Serializable> castedBackend = (VascBackend<Serializable>) backend;
backends.put(backend.getId(), castedBackend);
backends.put(backend.getId(), backend);
}
/**
* @see net.forwardfire.vasc.backend.VascBackendControllerLocal#removeVascBackendById(java.lang.String)
*/
@Override
public void removeVascBackendById(String backendId) {
VascBackend<? extends Serializable> backend = getVascBackendById(backendId);
if (backend==null) {
throw new NullPointerException("Could not find backend to remove with id: "+backendId);
public VascBackend removeVascBackend(VascBackend backend) {
VascBackend result = getVascBackendById(VascBackend.class,backend.getId());
if (result==null) {
throw new NullPointerException("Could not find backend to remove with id: "+backend.getId());
}
backend.stopBackend();
backends.remove(backendId);
return backends.remove(backend.getId());
}
/**
* @see net.forwardfire.vasc.backend.VascBackendControllerLocal#clearAndStopBackends()
*/
@Override
public void clearAndStopBackends() {
public void stopBackends() {
for (String backendId:getVascBackendIds()) {
removeVascBackendById(backendId);
VascBackend vb = getVascBackendById(VascBackend.class,backendId);
if (vb instanceof VascBackendLocal) {
VascBackendLocal vbl = (VascBackendLocal)vb;
vbl.stopBackend();
}
}
}
@Override
public void startBackends() {
for (String backendId:getVascBackendIds()) {
VascBackend vb = getVascBackendById(VascBackend.class,backendId);
if (vb instanceof VascBackendLocal) {
VascBackendLocal vbl = (VascBackendLocal)vb;
vbl.startBackend();
}
}
}
}

View file

@ -0,0 +1,87 @@
package net.forwardfire.vasc.backend;
import java.io.Serializable;
import java.util.Collection;
import java.util.Objects;
abstract public class AbstractVascBackendLocal<DATA_PK extends Serializable> implements VascBackendLocal<DATA_PK> {
private static final String CHECK_MSG_ID = " in ";
private String id = null;
private volatile boolean running = false;
/**
* @see net.forwardfire.vasc.backend.crud.VascBackend#getId()
*/
@Override
final public String getId() {
return id;
}
/**
* @see net.forwardfire.vasc.backend.crud.VascBackendLocal#setId(java.lang.String)
*/
@Override
final public void setId(String id) {
if (id==null) {
throw new IllegalArgumentException("id may not be null");
}
if (this.id!=null) {
throw new IllegalStateException("Can't change id after setting.");
}
this.id=id;
}
abstract protected void startBackendLocal();
protected void stopBackendLocal() {
}
/**
* @see net.forwardfire.vasc.backend.crud.VascBackendLocal#startBackend()
*/
@Override
final public void startBackend() {
requireNonEmpty(getId(),"id is empty.");
startBackendLocal();
running = true;
}
/**
* @see net.forwardfire.vasc.backend.crud.VascBackendLocal#stopBackend()
*/
@Override
final public void stopBackend() {
stopBackendLocal();
running = false;
}
/**
* @see net.forwardfire.vasc.backend.VascBackendLifeCycle#isRunning()
*/
@Override
final public boolean isRunning() {
return running;
}
final private String createCheckMessage(String message) {
return message + CHECK_MSG_ID + getId();
}
final protected void requireNonNull(Object value, String message) {
Objects.requireNonNull(value, createCheckMessage(message));
}
final protected void requireNonEmpty(String value, String message) {
requireNonNull(value, message);
if (value.isEmpty()) {
throw new IllegalArgumentException(createCheckMessage(message));
}
}
final protected void requireNonEmpty(Collection<?> value, String message) {
requireNonNull(value, message);
if (value.isEmpty()) {
throw new IllegalArgumentException(createCheckMessage(message));
}
}
}

View file

@ -0,0 +1,8 @@
package net.forwardfire.vasc.backend;
import java.io.Serializable;
public abstract interface AbstractVascBackendRecord <K extends Serializable,T extends Serializable> extends VascBackend<K> {
VascBackendAccessDataRecord<K,T> createVascBackendAccessDataRecord();
}

View file

@ -1,96 +1,10 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.backend;
import java.io.Serializable;
/**
* VascBackend provides stateless data access to a data source.
*
* @author Willem Cazander
* @version 1.0 Mar 21, 2007
*/
public interface VascBackend<DATA_OBJECT extends Serializable> {
public interface VascBackend <DATA_PK extends Serializable> {
String getId();
void setId(String id);
void startBackend();
void stopBackend();
VascBackendResult<DATA_OBJECT> execute(VascBackendState state) throws VascBackendException;
boolean isReadOnly();
//public DATA_OBJECT fetch(Map<String,Serializable> pks) throws VascBackendException;
void persist(DATA_OBJECT record) throws VascBackendException;
DATA_OBJECT merge(DATA_OBJECT record) throws VascBackendException;
void delete(DATA_OBJECT record) throws VascBackendException;
/**
* Creates a new Field acces obj the the given field entry.
* note: Do not use inline class here because it needs to be seriabable and the backend is not seriabbzle.
* @return
*/
VascEntryFieldValue<DATA_OBJECT> provideVascEntryFieldValue();
/**
* Creates a new RecordCreater obj the the given entry.
* note: Do not use inline class here because it needs to be seriabable and the backend is not seriabbzle.
* @return
*/
VascEntryRecordCreator<DATA_OBJECT> provideVascEntryRecordCreator();
/**
* Defines if the backend supports sorting
* @return
*/
boolean isSortable();
/**
* Defines if the backend supports pageing
* @return
*/
boolean isPageable();
/**
* Defines if the backend supports pageing
* @return
*/
boolean isSearchable();
/**
* Defines if the backend supports moveing an record up or down.
* @return
*/
boolean isRecordMoveable();
long doRecordMoveUpById(VascBackendState state,Object primaryId) throws VascBackendException;
long doRecordMoveDownById(VascBackendState state,Object primaryId) throws VascBackendException;
boolean hasPageSummary();
boolean hasTotalSummary();
VascBackendAccessDataKey<DATA_PK> createVascBackendAccessDataKey();
}

View file

@ -23,28 +23,21 @@
package net.forwardfire.vasc.backend;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* DefaultVascBackendResult.
* VascEntryFieldValue
*
* @author Willem Cazander
* @version 1.0 Aug 23, 2014
* @version 1.0 Oct 24, 2014
*/
public final class DefaultVascBackendResult<DATA_OBJECT extends Serializable> extends AbstractVascBackendResult<DATA_OBJECT> {
public interface VascBackendAccessDataKey<DATA_PK extends Serializable> extends Serializable {
public DefaultVascBackendResult(List<DATA_OBJECT> pageData) {
this(pageData,-1);
}
Map<String,Class<?>> getKeyMapType();
Map<String,Serializable> getKeyMapFromPrimaryKey(DATA_PK primaryKey) throws VascBackendException;
DATA_PK getPrimaryKeyFromKeyMap(Map<String,Serializable> keyMap) throws VascBackendException;
public DefaultVascBackendResult(List<DATA_OBJECT> pageData,long totalSize) {
this(pageData,totalSize,null,null);
}
public DefaultVascBackendResult(List<DATA_OBJECT> pageData, long totalSize,
Map<String, Serializable> pageSummary,
Map<String, Serializable> totalSummary) {
super(pageData, totalSize, pageSummary, totalSummary);
}
}
Map<String,String> getStringMapFromPrimaryKey(DATA_PK primaryKey) throws VascBackendException;
DATA_PK getPrimaryKeyFromStringMap(Map<String,String> keyMap) throws VascBackendException;
}

View file

@ -31,11 +31,11 @@ import java.io.Serializable;
* @author Willem Cazander
* @version 1.0 Mar 21, 2007
*/
public interface VascEntryFieldValue<DATA_OBJECT extends Serializable> extends Serializable {
public interface VascBackendAccessDataRecord<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends Serializable {
Serializable getValue(String backendName,DATA_OBJECT record) throws VascBackendException;
DATA_PK getPrimaryKey(DATA_RECORD record) throws VascBackendException;
String getDisplayValue(String backendName,DATA_OBJECT record) throws VascBackendException;
Serializable getValue(String backendName,DATA_RECORD record) throws VascBackendException;
void setValue(String backendName,DATA_OBJECT record,Serializable value) throws VascBackendException;
void setValue(String backendName,DATA_RECORD record,Serializable value) throws VascBackendException;
}

View file

@ -22,18 +22,17 @@
package net.forwardfire.vasc.backend;
import java.io.Serializable;
import java.util.List;
/**
* VascBackendController.
*
* @author Willem Cazander
* @version 1.0 Sep 4, 2008
*/
public interface VascBackendController {
VascBackend<Serializable> getVascBackendById(String id);
<BACKEND_TYPE extends VascBackend> BACKEND_TYPE getVascBackendById(Class<BACKEND_TYPE> clazz,String id);
List<String> getVascBackendIds();
}
}

View file

@ -22,9 +22,6 @@
package net.forwardfire.vasc.backend;
import java.io.Serializable;
/**
*
* @author Willem Cazander
@ -32,9 +29,11 @@ import java.io.Serializable;
*/
public interface VascBackendControllerLocal extends VascBackendController {
void addVascBackend(VascBackend<? extends Serializable> backend);
void addVascBackend(VascBackend backend);
void removeVascBackendById(String backendId);
VascBackend removeVascBackend(VascBackend backend);
void clearAndStopBackends();
void startBackends();
void stopBackends();
}

View file

@ -0,0 +1,10 @@
package net.forwardfire.vasc.backend;
import java.io.Serializable;
public interface VascBackendLifeCycle<DATA_PK extends Serializable> extends VascBackend<DATA_PK> {
void startBackend();
void stopBackend();
boolean isRunning();
}

View file

@ -0,0 +1,8 @@
package net.forwardfire.vasc.backend;
import java.io.Serializable;
public interface VascBackendLocal<DATA_PK extends Serializable> extends VascBackendLifeCycle<DATA_PK> {
void setId(String id);
}

View file

@ -0,0 +1,47 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.backend.crud;
import java.io.Serializable;
import net.forwardfire.vasc.backend.AbstractVascBackendRecord;
import net.forwardfire.vasc.backend.VascBackendException;
/**
* VascBackendCrud provides stateless data access to a data source.
*
* @author Willem Cazander
* @version 1.0 Mar 21, 2007
*/
public interface VascBackendCrud<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractVascBackendRecord<DATA_PK,DATA_RECORD> {
public DATA_RECORD fetch(DATA_PK recordPK) throws VascBackendException;
DATA_RECORD persist(DATA_RECORD record) throws VascBackendException;
DATA_RECORD merge(DATA_RECORD record) throws VascBackendException;
void delete(DATA_PK recordPK) throws VascBackendException;
DATA_RECORD newRecord() throws VascBackendException;
}

View file

@ -20,26 +20,24 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.forwardfire.vasc.backend.data;
package net.forwardfire.vasc.backend.crud;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
/**
* MapVascEntryRecordCreator creates a new HashMap for Map based record backends.
* VascBackendCrudRevision idea test.
*
* @author Willem Cazander
* @version 1.0 Dec 05, 2009
* @version 1.0 Mar 25, 2014
*/
public class HashMapVascEntryRecordCreator implements VascEntryRecordCreator<HashMap<String,Serializable>> {
public interface VascBackendCrudRevision<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends VascBackendCrud<DATA_PK,DATA_RECORD> {
private static final long serialVersionUID = 1L;
@Override
public HashMap<String,Serializable> newRecord() throws VascBackendException {
return new HashMap<String,Serializable>(10);
}
List<?> revisionList(DATA_PK recordPK) throws VascBackendException;
void revisionDelete(String version) throws VascBackendException;
DATA_RECORD revisionFetch(DATA_PK recordPK,String version) throws VascBackendException;
}

View file

@ -0,0 +1,8 @@
/**
*
*/
/**
* @author willemc
*
*/
package net.forwardfire.vasc.backend.crud;

View file

@ -0,0 +1,54 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.backend.data;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import net.forwardfire.vasc.backend.VascBackendAccessDataKey;
import net.forwardfire.vasc.backend.VascBackendException;
/**
* AbstractVascBackendAccessDataKey.
* note: all types need to have a String constructor ot
*
* @author Willem Cazander
* @version 1.0 Oct 27, 2014
*/
@SuppressWarnings("serial")
abstract public class AbstractVascBackendAccessDataKey<DATA_PK extends Serializable> implements VascBackendAccessDataKey<DATA_PK> {
private final Map<String,Class<?>> keyMapType;
public AbstractVascBackendAccessDataKey(Map<String,Class<?>> keyMapType) {
this.keyMapType = keyMapType;
}
@Override
public final Map<String, Class<?>> getKeyMapType() {
return keyMapType;
}
}

View file

@ -22,39 +22,54 @@
package net.forwardfire.vasc.backend.data;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import net.forwardfire.vasc.backend.VascBackendAccessDataKey;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
import org.x4o.xml.element.DefaultElementObjectPropertyValue;
/**
* BeanVascEntryRecordCreator creates a new backend record based on class object.
* BeanVascBackendAccessDataKey provides primary key support on beans.
*
* @author Willem Cazander
* @version 1.0 Dec 05, 2009
* @version 1.0 Oct 27, 2014
*/
public class BeanVascEntryRecordCreator<DATA_OBJECT extends Serializable> implements VascEntryRecordCreator<DATA_OBJECT> {
@SuppressWarnings("serial")
public class BeanVascBackendAccessDataKey<DATA_PK extends Serializable> extends AbstractVascBackendAccessDataKey<DATA_PK> {
private final Class<?> primaryKeyType;
private final DefaultElementObjectPropertyValue bean = new DefaultElementObjectPropertyValue();
private static final long serialVersionUID = 1L;
private Class<?> resultClass = null;
public BeanVascEntryRecordCreator(Class<?> resultClass) {
if (resultClass==null) {
throw new NullPointerException("Can't provide creator service with null class object.");
}
this.resultClass=resultClass;
public BeanVascBackendAccessDataKey(Class<?> primaryKeyType,Map<String,Class<?>> keyMapType) {
super(keyMapType);
this.primaryKeyType=primaryKeyType;
}
@SuppressWarnings("unchecked")
@Override
public DATA_OBJECT newRecord() throws VascBackendException {
try {
return (DATA_OBJECT)resultClass.newInstance();
} catch (InstantiationException e) {
throw new VascBackendException(e);
} catch (IllegalAccessException e) {
throw new VascBackendException(e);
}
public Map<String, Serializable> getKeyMapFromPrimaryKey(DATA_PK primaryKey) throws VascBackendException {
Map<String, Serializable> result = new HashMap<String, Serializable>();
return result;
}
@Override
public DATA_PK getPrimaryKeyFromKeyMap(Map<String, Serializable> keyMap) throws VascBackendException {
//DATA_PK result = primaryKeyType.newInstance();
return null;
}
@Override
public Map<String, String> getStringMapFromPrimaryKey(DATA_PK primaryKey) throws VascBackendException {
return null;
}
@Override
public DATA_PK getPrimaryKeyFromStringMap(Map<String, String> keyMap) throws VascBackendException {
return null;
}
}

View file

@ -26,26 +26,40 @@ package net.forwardfire.vasc.backend.data;
import java.io.Serializable;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascEntryFieldValue;
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
import org.x4o.xml.element.DefaultElementObjectPropertyValue;
/**
* BeanVascEntryFieldValue provides get/set support for bean based backends.
* BeanVascBackendAccessDataRecord provides get/set support for bean based backends.
*
* @author Willem Cazander
* @version 1.0 Dec 05, 2009
*/
public class BeanVascEntryFieldValue<DATA_OBJECT extends Serializable> implements VascEntryFieldValue<DATA_OBJECT> {
@SuppressWarnings("serial")
public class BeanVascBackendAccessDataRecord<DATA_PK extends Serializable,DATA_RECORD extends Serializable> implements VascBackendAccessDataRecord<DATA_PK,DATA_RECORD> {
private static final long serialVersionUID = 1L;
private final String primaryKeyProperty;
private DefaultElementObjectPropertyValue bean = new DefaultElementObjectPropertyValue();
public BeanVascBackendAccessDataRecord(String primaryKeyProperty) {
this.primaryKeyProperty = primaryKeyProperty;
}
/**
* @see net.forwardfire.vasc.core.entry.VascEntryFieldValue#getValue(java.lang.String, java.lang.Object)
* @see net.forwardfire.vasc.backend.VascBackendAccessDataRecord#getPrimaryKey(java.io.Serializable)
*/
@Override
public Serializable getValue(String backendName, DATA_OBJECT record) throws VascBackendException {
@SuppressWarnings("unchecked")
public DATA_PK getPrimaryKey(DATA_RECORD record) throws VascBackendException {
return (DATA_PK) getValue(primaryKeyProperty, record);
}
/**
* @see net.forwardfire.vasc.core.entry.VascBackendAccessDataRecord#getValue(java.lang.String, java.lang.Object)
*/
@Override
public Serializable getValue(String backendName, DATA_RECORD record) throws VascBackendException {
if (backendName==null) {
throw new NullPointerException("Can't get value of null backendName.");
}
@ -59,42 +73,12 @@ public class BeanVascEntryFieldValue<DATA_OBJECT extends Serializable> implement
throw new VascBackendException(e);
}
}
/**
* @see net.forwardfire.vasc.core.entry.VascEntryFieldValue#getDisplayValue(java.lang.String, java.lang.Object)
* @see net.forwardfire.vasc.core.entry.VascBackendAccessDataRecord#setValue(java.lang.String, java.lang.Object, java.lang.Object)
*/
@Override
public String getDisplayValue(String backendName, DATA_OBJECT record) throws VascBackendException {
Serializable value = getValue(backendName,record);
if (value==null) {
return "";
}
return value.toString();
/* TODO: move
if (field.getDisplayName()==null) {
if (value instanceof String) {
return (String)value;
}
return ""+value;
}
try {
Object result = bean.getProperty(value, field.getDisplayName());
if (result instanceof String) {
return (String)result;
}
return ""+result;
} catch (Exception e) {
throw new VascBackendException(e);
}
*/
}
/**
* @see net.forwardfire.vasc.core.entry.VascEntryFieldValue#setValue(java.lang.String, java.lang.Object, java.lang.Object)
*/
@Override
public void setValue(String backendName, DATA_OBJECT record,Serializable value) throws VascBackendException {
public void setValue(String backendName, DATA_RECORD record,Serializable value) throws VascBackendException {
if (backendName==null) {
throw new NullPointerException("Can't set value of null backendName.");
}

View file

@ -0,0 +1,104 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.backend.data;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import net.forwardfire.vasc.backend.VascBackendException;
/**
* HashMapVascBackendAccessDataKey provides get/set support on Map key object.
* note: all types need to have a String constructor.
*
* @author Willem Cazander
* @version 1.0 Oct 26, 2014
*/
@SuppressWarnings("serial")
public class HashMapVascBackendAccessDataKey extends AbstractVascBackendAccessDataKey<HashMap<String,Serializable>> {
public HashMapVascBackendAccessDataKey(Map<String,Class<?>> keyMapType) {
super(keyMapType);
}
@Override
public Map<String, Serializable> getKeyMapFromPrimaryKey(HashMap<String, Serializable> primaryKey) throws VascBackendException {
return new HashMap<String, Serializable>(primaryKey); // wrap only as key is already object map
}
@Override
public HashMap<String, Serializable> getPrimaryKeyFromKeyMap(Map<String, Serializable> keyMap) throws VascBackendException {
return new HashMap<String, Serializable>(keyMap); // wrap only as key is already object map
}
@Override
public Map<String, String> getStringMapFromPrimaryKey(HashMap<String, Serializable> primaryKey) throws VascBackendException {
HashMap<String,String> result = new HashMap<String,String>(primaryKey.size());
for (String key:primaryKey.keySet()) {
Serializable value = primaryKey.get(key);
if (value == null) {
result.put(key, null);
} else {
result.put(key, value.toString());
}
}
return result;
}
@Override
public HashMap<String, Serializable> getPrimaryKeyFromStringMap(Map<String, String> keyMap) throws VascBackendException {
try {
HashMap<String,Serializable> result = new HashMap<String,Serializable>(keyMap.size());
for (String key:keyMap.keySet()) {
String valueStr = keyMap.get(key);
Class<?> valueType = getKeyMapType().get(key);
if (valueType == null) {
throw new IllegalArgumentException("unknown key: "+key);
}
if (valueStr == null) {
result.put(key, null);
continue;
}
Constructor<?> valueObj = valueType.getConstructor(new Class<?>[]{String.class});
Object value = valueObj.newInstance(new Object[]{valueStr});
result.put(key, (Serializable)value);
}
return result;
} catch (NoSuchMethodException e) {
throw new VascBackendException(e);
} catch (SecurityException e) {
throw new VascBackendException(e);
} catch (InstantiationException e) {
throw new VascBackendException(e);
} catch (IllegalAccessException e) {
throw new VascBackendException(e);
} catch (IllegalArgumentException e) {
throw new VascBackendException(e);
} catch (InvocationTargetException e) {
throw new VascBackendException(e);
}
}
}

View file

@ -24,22 +24,40 @@ package net.forwardfire.vasc.backend.data;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascEntryFieldValue;
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
/**
* MapVascEntryFieldValue provides get/set support on Map record object.
* HashMapVascBackendAccessDataRecord provides get/set support on Map record object.
*
* @author Willem Cazander
* @version 1.0 Dec 05, 2009
*/
public class HashMapVascEntryFieldValue implements VascEntryFieldValue<HashMap<String,Serializable>> {
private static final long serialVersionUID = 1L;
@SuppressWarnings("serial")
public class HashMapVascBackendAccessDataRecord implements VascBackendAccessDataRecord<HashMap<String,Serializable>,HashMap<String,Serializable>> {
private final Map<String,Class<?>> keyMapType;
public HashMapVascBackendAccessDataRecord(Map<String,Class<?>> keyMapType) {
this.keyMapType = keyMapType;
}
/**
* @see net.forwardfire.vasc.core.entry.VascEntryFieldValue#getValue(java.lang.String, java.lang.Object)
* @see net.forwardfire.vasc.backend.VascBackendAccessDataRecord#getPrimaryKey(java.io.Serializable)
*/
@Override
public HashMap<String, Serializable> getPrimaryKey(HashMap<String, Serializable> record) throws VascBackendException {
HashMap<String, Serializable> result = new HashMap<String, Serializable>(keyMapType.size());
for (String key:keyMapType.keySet()) {
result.put(key, record.get(key));
}
return result;
}
/**
* @see net.forwardfire.vasc.core.entry.VascBackendAccessDataRecord#getValue(java.lang.String, java.lang.Object)
*/
@Override
public Serializable getValue(String backendName,HashMap<String,Serializable> map) throws VascBackendException {
@ -52,21 +70,9 @@ public class HashMapVascEntryFieldValue implements VascEntryFieldValue<HashMap<S
Serializable fieldValue = map.get(backendName);
return fieldValue;
}
/**
* @see net.forwardfire.vasc.core.entry.VascEntryFieldValue#getDisplayValue(net.forwardfire.vasc.core.VascEntryField, java.lang.Object)
*/
@Override
public String getDisplayValue(String field, HashMap<String,Serializable> record) throws VascBackendException {
Serializable fieldValue = getValue(field,record);
if (fieldValue==null) {
fieldValue = "";
}
return fieldValue.toString();
}
/**
* @see net.forwardfire.vasc.core.entry.VascEntryFieldValue#setValue(java.lang.String, java.lang.Object, java.lang.Object)
* @see net.forwardfire.vasc.core.entry.VascBackendAccessDataRecord#setValue(java.lang.String, java.lang.Object, java.lang.Object)
*/
@Override
public void setValue(String backendName, HashMap<String,Serializable> map,Serializable value) throws VascBackendException {

View file

@ -20,20 +20,23 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.forwardfire.vasc.backend;
package net.forwardfire.vasc.backend.list;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* Holds the state for the backend
*
* @author Willem Cazander
* @version 1.0 May 26, 2009
*/
abstract public class AbstractVascBackendState implements VascBackendState {
private static final long serialVersionUID = 1L;
@SuppressWarnings("serial")
public class DefaultVascBackendListRequest implements VascBackendListRequest {
protected Map<String,Object> parameters = null;
private int pageIndex = 0;
private int pageSize = 0;
@ -41,38 +44,25 @@ abstract public class AbstractVascBackendState implements VascBackendState {
private String sortField = null;
private String searchString = null;
private boolean ascending = true;
//private long pagesTotalRecords = 0;
public AbstractVascBackendState() {
public DefaultVascBackendListRequest() {
parameters = new HashMap<String,Object>(10);
}
/**
* @see net.forwardfire.vasc.backend.VascBackendState#setDataParameter(java.lang.String, java.lang.Object)
*/
@Override
public void setDataParameter(String key, Object data) {
parameters.put(key,data);
}
/**
* @see net.forwardfire.vasc.backend.VascBackendState#removeDataParameter(java.lang.String)
*/
@Override
public void removeDataParameter(String key) {
parameters.remove(key);
}
/**
* @see net.forwardfire.vasc.backend.VascBackendState#removeDataParameterAll()
*/
@Override
public void removeDataParameterAll() {
parameters.clear();
}
/**
* @see net.forwardfire.vasc.backend.VascBackendState#getDataParameter(java.lang.String)
* @see net.forwardfire.vasc.backend.list.VascBackendListRequest#getDataParameter(java.lang.String)
*/
@Override
public Object getDataParameter(String key) {
@ -80,7 +70,7 @@ abstract public class AbstractVascBackendState implements VascBackendState {
}
/**
* @see net.forwardfire.vasc.backend.VascBackendState#getDataParameterKeys()
* @see net.forwardfire.vasc.backend.list.VascBackendListRequest#getDataParameterKeys()
*/
@Override
public Set<String> getDataParameterKeys() {
@ -88,85 +78,65 @@ abstract public class AbstractVascBackendState implements VascBackendState {
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#getPageIndex()
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#getPageIndex()
*/
@Override
public int getPageIndex() {
return pageIndex;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#setPageIndex(int)
*/
@Override
public void setPageIndex(int pageIndex) {
this.pageIndex=pageIndex;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#getPageSize()
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#getPageSize()
*/
@Override
public int getPageSize() {
return pageSize;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#setPageSize(int)
*/
@Override
public void setPageSize(int pageSize) {
this.pageSize=pageSize;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#getSearchString()
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#getSearchString()
*/
@Override
public String getSearchString() {
return searchString;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#setSearchString(java.lang.String)
*/
@Override
public void setSearchString(String searchString) {
this.searchString=searchString;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#isSortAscending()
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#isSortAscending()
*/
@Override
public boolean isSortAscending() {
return ascending;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#setSortAscending(boolean)
*/
@Override
public void setSortAscending(boolean ascending) {
this.ascending=ascending;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#getSortField()
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#getSortField()
*/
@Override
public String getSortField() {
return sortField;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#setSortField(java.lang.String)
*/
@Override
public void setSortField(String sortField) {
this.sortField=sortField;
}
/**
* @return the pageSizeMax
*/
@ -174,11 +144,7 @@ abstract public class AbstractVascBackendState implements VascBackendState {
public int getPageSizeMax() {
return pageSizeMax;
}
/**
* @param pageSizeMax the pageSizeMax to set
*/
@Override
public void setPageSizeMax(int pageSizeMax) {
this.pageSizeMax = pageSizeMax;
}

View file

@ -20,61 +20,60 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.forwardfire.vasc.backend;
package net.forwardfire.vasc.backend.list;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* AbstractVascBackendResult.
* DefaultVascBackendResult.
*
* @author Willem Cazander
* @version 1.0 Aug 23, 2014
*/
abstract public class AbstractVascBackendResult<DATA_OBJECT extends Serializable> implements VascBackendResult<DATA_OBJECT> {
private final List<DATA_OBJECT> pageData;
private final long totalSize;
private final Map<String, Serializable> pageSummary;
private final Map<String, Serializable> totalSummary;
@SuppressWarnings("serial")
public final class DefaultVascBackendListResult<DATA_OBJECT extends Serializable> implements VascBackendListResult<DATA_OBJECT> {
public AbstractVascBackendResult(List<DATA_OBJECT> pageData,long totalSize,Map<String, Serializable> pageSummary,Map<String, Serializable> totalSummary) {
this.pageData = pageData;
this.totalSize = totalSize;
this.pageSummary = pageSummary;
this.totalSummary = totalSummary;
private final List<DATA_OBJECT> data;
private final long totalRecordCount;
private final Map<String,Map<String,Serializable>> dataExtra;
public DefaultVascBackendListResult(List<DATA_OBJECT> data) {
this(data,data.size());
}
public DefaultVascBackendListResult(List<DATA_OBJECT> data,long totalRecordCount) {
this(data,totalRecordCount,null);
}
public DefaultVascBackendListResult(List<DATA_OBJECT> data,long totalRecordCount,Map<String,Map<String,Serializable>> dataExtra) {
this.data = data;
this.totalRecordCount = totalRecordCount;
this.dataExtra = dataExtra;
}
/**
* @see net.forwardfire.vasc.backend.VascBackendResult#getPageData()
* @see net.forwardfire.vasc.backend.list.VascBackendListResult#getData()
*/
@Override
public List<DATA_OBJECT> getPageData() {
return pageData;
public List<DATA_OBJECT> getData() {
return data;
}
/**
* @see net.forwardfire.vasc.backend.VascBackendResult#getTotalSize()
* @see net.forwardfire.vasc.backend.list.VascBackendListResult#getTotalRecordCount()
*/
@Override
public long getTotalSize() {
return totalSize;
public long getTotalRecordCount() {
return totalRecordCount;
}
/**
* @see net.forwardfire.vasc.backend.VascBackendResult#getPageSummary()
* @see net.forwardfire.vasc.backend.list.VascBackendListResult#getDataExtra()
*/
@Override
public Map<String, Serializable> getPageSummary() {
return pageSummary;
}
/**
* @see net.forwardfire.vasc.backend.VascBackendResult#getTotalSummary()
*/
@Override
public Map<String, Serializable> getTotalSummary() {
return totalSummary;
public Map<String,Map<String,Serializable>> getDataExtra() {
return dataExtra;
}
}

View file

@ -0,0 +1,71 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.backend.list;
import java.io.Serializable;
import java.util.EnumSet;
import java.util.List;
import net.forwardfire.vasc.backend.AbstractVascBackendRecord;
import net.forwardfire.vasc.backend.VascBackendException;
/**
* VascBackendList provides stateless data access to a data source which result one or multiple results.
*
* @author Willem Cazander
* @version 1.0 Aug 25, 2014
*/
public interface VascBackendList<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractVascBackendRecord<DATA_PK,DATA_RECORD> {
final static String ROW_ACTION_MOVE_UP = "rowActionMoveUp";
final static String ROW_ACTION_MOVE_DOWN = "rowActionMoveDown";
final static String ROW_ACTION_DELETE = "rowActionDelete";
/**
* Defines the features this list backend supports.
* @return An enum set of feature flags.
*/
EnumSet<VascBackendListFeature> getSupportedFeatures();
/**
* Executes the list request with parameters to return a list result.
* @param request
* @return
* @throws VascBackendException
*/
VascBackendListResult<DATA_RECORD> execute(VascBackendListRequest request) throws VascBackendException;
/**
* @return Returns the action names of the row actions we support.
*/
List<String> getSupportedRowActions();
/**
* Executes a single row action on one or more rows of fresh data.
* @param request
* @param recordPKs
* @param actionName
* @throws VascBackendException
*/
void executeRowAction(VascBackendListRequest request,List<DATA_PK> recordPKs,String actionName) throws VascBackendException;
}

View file

@ -20,16 +20,28 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.forwardfire.vasc.backend;
package net.forwardfire.vasc.backend.list;
/**
* Holds the state for the backend
* VascBackendListFeatures.
*
* @author Willem Cazander
* @version 1.0 May 26, 2009
* @version 1.0 Aug 26, 2014
*/
public class DefaultVascBackendState extends AbstractVascBackendState {
private static final long serialVersionUID = 8828343641448595993L;
}
public enum VascBackendListFeature {
/** Defines if the backend supports sorting. */
SORT_DATA,
SORT_DATA_PROXY,
/** Defines if the backend supports paging. */
PAGE_DATA,
PAGE_DATA_PROXY,
/** Defines if the backend support full text search. */
TEXT_SEARCH,
TEXT_SEARCH_PROXY,
DATA_EXTRA,
DATA_EXTRA_PROXY;
}

View file

@ -20,7 +20,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.forwardfire.vasc.backend;
package net.forwardfire.vasc.backend.list;
import java.io.Serializable;
import java.util.Set;
@ -31,28 +31,20 @@ import java.util.Set;
* @author Willem Cazander
* @version 1.0 May 26, 2009
*/
public interface VascBackendState extends Serializable {
public interface VascBackendListRequest extends Serializable {
void setDataParameter(String key,Object data);
void removeDataParameter(String key);
void removeDataParameterAll();
Object getDataParameter(String key);
Set<String> getDataParameterKeys();
String getSortField();
void setSortField(String name);
boolean isSortAscending();
void setSortAscending(boolean ascending);
void setPageSize(int size);
int getPageSize();
void setPageSizeMax(int size);
int getPageSizeMax();
void setPageIndex(int index);
int getPageIndex();
void setSearchString(String searchString);
String getSearchString();
}

View file

@ -20,7 +20,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.forwardfire.vasc.backend;
package net.forwardfire.vasc.backend.list;
import java.io.Serializable;
import java.util.List;
@ -32,10 +32,9 @@ import java.util.Map;
* @author Willem Cazander
* @version 1.0 Aug 23, 2014
*/
public interface VascBackendResult<DATA_OBJECT extends Serializable> {
public interface VascBackendListResult<DATA_OBJECT extends Serializable> extends Serializable {
List<DATA_OBJECT> getPageData();
long getTotalSize();
Map<String,Serializable> getPageSummary();
Map<String,Serializable> getTotalSummary();
List<DATA_OBJECT> getData();
long getTotalRecordCount();
Map<String,Map<String,Serializable>> getDataExtra();
}

View file

@ -0,0 +1,8 @@
/**
*
*/
/**
* @author willemc
*
*/
package net.forwardfire.vasc.backend.list;

View file

@ -0,0 +1,62 @@
package net.forwardfire.vasc.backend.select;
import java.io.Serializable;
public class DefaultVascBackendSelectItem<DATA_PK extends Serializable> implements VascBackendSelectItem<DATA_PK> {
private final boolean header;
private final boolean enabled;
private final String name;
private final boolean nameI18nKey;
private final String description;
private final boolean descriptionI18nKey;
private final DATA_PK primaryKey;
public DefaultVascBackendSelectItem(boolean header, boolean enabled,
String name, boolean nameI18nKey, String description,
boolean descriptionI18nKey, DATA_PK primaryKey) {
super();
this.header = header;
this.enabled = enabled;
this.name = name;
this.nameI18nKey = nameI18nKey;
this.description = description;
this.descriptionI18nKey = descriptionI18nKey;
this.primaryKey = primaryKey;
}
@Override
public boolean isHeader() {
return header;
}
@Override
public boolean isEnabled() {
return enabled;
}
@Override
public String getName() {
return name;
}
@Override
public boolean isNameI18nKey() {
return nameI18nKey;
}
@Override
public String getDescription() {
return description;
}
@Override
public boolean isDescriptionI18nKey() {
return descriptionI18nKey;
}
@Override
public DATA_PK getPrimaryKey() {
return primaryKey;
}
}

View file

@ -0,0 +1,12 @@
package net.forwardfire.vasc.backend.select;
import java.io.Serializable;
import java.util.List;
import net.forwardfire.vasc.backend.VascBackend;
import net.forwardfire.vasc.backend.VascBackendException;
public interface VascBackendSelect<DATA_PK extends Serializable> extends VascBackend<DATA_PK> {
List<VascBackendSelectItem<DATA_PK>> execute() throws VascBackendException;
}

View file

@ -20,17 +20,22 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.forwardfire.vasc.backend;
package net.forwardfire.vasc.backend.select;
import java.io.Serializable;
/**
*
* @author Willem Cazander
* @version 1.0 Mar 21, 2007
* @version 1.0 Aug 12, 2007
*/
public interface VascEntryRecordCreator<DATA_OBJECT extends Serializable> extends Serializable {
DATA_OBJECT newRecord() throws VascBackendException;
}
public interface VascBackendSelectItem<DATA_PK extends Serializable> {
boolean isHeader();
boolean isEnabled();
String getName();
boolean isNameI18nKey();
String getDescription();
boolean isDescriptionI18nKey();
DATA_PK getPrimaryKey();
}

View file

@ -0,0 +1,8 @@
/**
*
*/
/**
* @author willemc
*
*/
package net.forwardfire.vasc.backend.select;