WIP: left over open files for long...
This commit is contained in:
parent
0a2398c5c1
commit
76aa74990e
165 changed files with 4299 additions and 3373 deletions
|
|
@ -1,46 +1,47 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<artifactId>vasc</artifactId>
|
||||
<groupId>net.forwardfire.vasc</groupId>
|
||||
<version>0.4.2-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>vasc-core</artifactId>
|
||||
<name>vasc-core</name>
|
||||
<description>vasc-core</description>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.x4o</groupId>
|
||||
<artifactId>x4o-driver</artifactId>
|
||||
<version>${x4o.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.x4o</groupId>
|
||||
<artifactId>x4o-meta</artifactId>
|
||||
<version>${x4o.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.forwardfire.vasc.backend</groupId>
|
||||
<artifactId>vasc-backend-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.persistence</groupId>
|
||||
<artifactId>persistence-api</artifactId>
|
||||
<version>${persistence-api.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-validator</artifactId>
|
||||
<version>${hibernate-validator.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.odysseus.juel</groupId>
|
||||
<artifactId>juel</artifactId>
|
||||
<version>2.1.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<artifactId>vasc</artifactId>
|
||||
<groupId>net.forwardfire.vasc</groupId>
|
||||
<version>0.4.2-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>vasc-core</artifactId>
|
||||
<name>vasc-core</name>
|
||||
<description>vasc-core</description>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.x4o</groupId>
|
||||
<artifactId>x4o-driver</artifactId>
|
||||
<version>${x4o.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.x4o</groupId>
|
||||
<artifactId>x4o-meta</artifactId>
|
||||
<version>${x4o.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.forwardfire.vasc.backend</groupId>
|
||||
<artifactId>vasc-backend-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax</groupId>
|
||||
<artifactId>javaee-api</artifactId>
|
||||
<version>${javaee-api.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-validator</artifactId>
|
||||
<version>${hibernate-validator.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.odysseus.juel</groupId>
|
||||
<artifactId>juel</artifactId>
|
||||
<version>2.1.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import java.io.Serializable;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.core.ui.VascSelectItem;
|
||||
import net.forwardfire.vasc.backend.select.VascBackendSelectItem;
|
||||
import net.forwardfire.vasc.core.ui.VascSelectItemModel;
|
||||
import net.forwardfire.vasc.core.VascException;
|
||||
|
||||
|
|
@ -54,8 +54,8 @@ public class VascChoicesSelectItemModel implements VascSelectItemModel,Serializa
|
|||
* @see net.forwardfire.vasc.core.ui.VascSelectItemModel#getVascSelectItems(net.forwardfire.vasc.core.VascEntry)
|
||||
*/
|
||||
@Override
|
||||
public List<VascSelectItem> getVascSelectItems(net.forwardfire.vasc.core.VascEntry entry) throws VascException {
|
||||
List<VascSelectItem> result = new ArrayList<VascSelectItem>(10);
|
||||
public List<VascBackendSelectItem> getVascSelectItems(net.forwardfire.vasc.core.VascEntry entry) throws VascException {
|
||||
List<VascBackendSelectItem> result = new ArrayList<VascBackendSelectItem>(10);
|
||||
if ("null".equals(vascChoices.nullLabel())==false) {
|
||||
nullLabel = vascChoices.nullLabel();
|
||||
nullKeyValue = vascChoices.nullKeyValue();
|
||||
|
|
@ -65,7 +65,7 @@ public class VascChoicesSelectItemModel implements VascSelectItemModel,Serializa
|
|||
nullKeyValue = "null";
|
||||
}
|
||||
String nullLabelText = entry.getVascFrontendController().getVascEntryResourceResolver().getTextValue(nullLabel);
|
||||
VascSelectItem item = new VascSelectItem(nullLabelText,null,nullKeyValue);
|
||||
VascBackendSelectItem item = new VascBackendSelectItem(nullLabelText,null,nullKeyValue);
|
||||
result.add(item);
|
||||
}
|
||||
int index = 0;
|
||||
|
|
@ -78,7 +78,7 @@ public class VascChoicesSelectItemModel implements VascSelectItemModel,Serializa
|
|||
throw new IllegalStateException("Can't have unequal sizes of array of keys and values of vascChoices annotation.");
|
||||
}
|
||||
for (String key:a) {
|
||||
VascSelectItem item = new VascSelectItem();
|
||||
VascBackendSelectItem item = new VascBackendSelectItem();
|
||||
String name = null;
|
||||
if (val) {
|
||||
name = key;
|
||||
|
|
|
|||
|
|
@ -23,13 +23,14 @@
|
|||
package net.forwardfire.vasc.backend.proxy;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.VascEntryFieldValue;
|
||||
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendList;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListFeature;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
|
||||
/**
|
||||
|
|
@ -38,19 +39,25 @@ import net.forwardfire.vasc.core.VascEntry;
|
|||
* @author Willem Cazander
|
||||
* @version 1.0 Apr 1, 2009
|
||||
*/
|
||||
abstract public class AbstractVascBackendProxy implements VascBackendProxy {
|
||||
abstract public class AbstractVascBackendProxy<DATA_PK extends Serializable,DATA_RECORD extends Serializable> implements VascBackendProxy<DATA_PK,DATA_RECORD> {
|
||||
|
||||
protected VascBackend<Serializable> backend = null;
|
||||
protected VascBackendList<DATA_PK,DATA_RECORD> backend = null;
|
||||
protected VascEntry entry = null;
|
||||
private volatile boolean running = false;
|
||||
|
||||
@Override
|
||||
abstract public VascBackendProxy clone() throws CloneNotSupportedException;
|
||||
abstract public VascBackendProxy<DATA_PK,DATA_RECORD> clone() throws CloneNotSupportedException;
|
||||
|
||||
protected void startBackendProxy() {
|
||||
}
|
||||
protected void stopBackendProxy() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.VascBackendProxy#initProxy(net.forwardfire.vasc.backend.VascBackend, net.forwardfire.vasc.core.VascEntry)
|
||||
* @see net.forwardfire.vasc.backend.proxy.VascBackendProxy#initProxy(net.forwardfire.vasc.backend.crud.VascBackendList, net.forwardfire.vasc.core.VascEntry)
|
||||
*/
|
||||
@Override
|
||||
public void initProxy(VascBackend<Serializable> backend, VascEntry entry) {
|
||||
final public void initProxy(VascBackendList<DATA_PK,DATA_RECORD> backend, VascEntry entry) {
|
||||
if (backend==null) {
|
||||
throw new NullPointerException("backend object may not be null.");
|
||||
}
|
||||
|
|
@ -59,8 +66,35 @@ abstract public class AbstractVascBackendProxy implements VascBackendProxy {
|
|||
}
|
||||
this.backend=backend;
|
||||
this.entry=entry;
|
||||
startBackend();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackendLifeCycle#startBackend()
|
||||
*/
|
||||
@Override
|
||||
final public void startBackend() {
|
||||
startBackendProxy();
|
||||
running = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackendLifeCycle#stopBackend()
|
||||
*/
|
||||
@Override
|
||||
final public void stopBackend() {
|
||||
running = false;
|
||||
stopBackendProxy();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackendLifeCycle#isRunning()
|
||||
*/
|
||||
@Override
|
||||
public boolean isRunning() {
|
||||
return running;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.VascBackendProxy#isProxyNeeded()
|
||||
*/
|
||||
|
|
@ -70,104 +104,7 @@ abstract public class AbstractVascBackendProxy implements VascBackendProxy {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#startBackend()
|
||||
*/
|
||||
@Override
|
||||
public void startBackend() {
|
||||
backend.startBackend();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#stopBackend()
|
||||
*/
|
||||
@Override
|
||||
public void stopBackend() {
|
||||
backend.stopBackend();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#isReadOnly()
|
||||
*/
|
||||
@Override
|
||||
public boolean isReadOnly() {
|
||||
return backend.isReadOnly();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#isSortable()
|
||||
*/
|
||||
@Override
|
||||
public boolean isSortable() {
|
||||
return backend.isSortable();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#execute(VascBackendState state)
|
||||
*/
|
||||
@Override
|
||||
public VascBackendResult<Serializable> execute(VascBackendState state) throws VascBackendException {
|
||||
return backend.execute(state);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#delete(java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public void delete(Serializable object) throws VascBackendException {
|
||||
backend.delete(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#isPageable()
|
||||
*/
|
||||
@Override
|
||||
public boolean isPageable() {
|
||||
return backend.isPageable();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#isSearchable()
|
||||
*/
|
||||
@Override
|
||||
public boolean isSearchable() {
|
||||
return backend.isSearchable();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#merge(java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public Serializable merge(Serializable object) throws VascBackendException {
|
||||
return backend.merge(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#persist(java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public void persist(Serializable object) throws VascBackendException {
|
||||
backend.persist(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#provideVascEntryFieldValue()
|
||||
*/
|
||||
@Override
|
||||
public VascEntryFieldValue<Serializable> provideVascEntryFieldValue() {
|
||||
return backend.provideVascEntryFieldValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#provideVascEntryRecordCreator()
|
||||
*/
|
||||
@Override
|
||||
public VascEntryRecordCreator<Serializable> provideVascEntryRecordCreator() {
|
||||
return backend.provideVascEntryRecordCreator();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#getId()
|
||||
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#getId()
|
||||
*/
|
||||
@Override
|
||||
public String getId() {
|
||||
|
|
@ -175,50 +112,25 @@ abstract public class AbstractVascBackendProxy implements VascBackendProxy {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#setId(java.lang.String)
|
||||
* @see net.forwardfire.vasc.backend.list.VascBackendList#getSupportedFeatures()
|
||||
*/
|
||||
@Override
|
||||
public void setId(String id) {
|
||||
backend.setId(id);
|
||||
public EnumSet<VascBackendListFeature> getSupportedFeatures() {
|
||||
return backend.getSupportedFeatures(); // backend will always provide cloned copy
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.core.VascBackend#doRecordMoveDownById(VascBackendState state,java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public long doRecordMoveDownById(VascBackendState state,Object primaryId) throws VascBackendException {
|
||||
return backend.doRecordMoveDownById(state,primaryId);
|
||||
public VascBackendListResult<DATA_RECORD> execute(VascBackendListRequest request) throws VascBackendException {
|
||||
return backend.execute(request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.core.VascBackend#doRecordMoveUpById(VascBackendState state,java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public long doRecordMoveUpById(VascBackendState state,Object primaryId) throws VascBackendException {
|
||||
return backend.doRecordMoveUpById(state,primaryId);
|
||||
public List<String> getSupportedRowActions() {
|
||||
return backend.getSupportedRowActions();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#isRecordMoveable()
|
||||
*/
|
||||
@Override
|
||||
public boolean isRecordMoveable() {
|
||||
return backend.isRecordMoveable();
|
||||
public void executeRowAction(VascBackendListRequest request,List<DATA_PK> recordPKs,String actionName) throws VascBackendException {
|
||||
executeRowAction(request, recordPKs, actionName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#hasPageSummary()
|
||||
*/
|
||||
@Override
|
||||
public boolean hasPageSummary() {
|
||||
return backend.hasPageSummary();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#hasTotalSummary()
|
||||
*/
|
||||
@Override
|
||||
public boolean hasTotalSummary() {
|
||||
return backend.hasTotalSummary();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,88 +20,45 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package net.forwardfire.vasc.core.ui;
|
||||
package net.forwardfire.vasc.backend.proxy;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.EnumSet;
|
||||
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListFeature;
|
||||
|
||||
/**
|
||||
* AbstractVascBackendProxyFeature to implement single features of the backend.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Aug 12, 2007
|
||||
* @version 1.0 Aug 27, 2014
|
||||
*/
|
||||
public class VascSelectItem {
|
||||
|
||||
private String label = null;
|
||||
private Serializable value = null;
|
||||
private String keyValue = null;
|
||||
private boolean disabled = false;
|
||||
abstract public class AbstractVascBackendProxyFeature<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractVascBackendProxy<DATA_PK,DATA_RECORD> {
|
||||
|
||||
public VascSelectItem() {
|
||||
|
||||
}
|
||||
public VascSelectItem(String label,Serializable value) {
|
||||
setLabel(label);
|
||||
setValue(value);
|
||||
}
|
||||
public VascSelectItem(String label,Serializable value,String keyValue) {
|
||||
setLabel(label);
|
||||
setValue(value);
|
||||
setKeyValue(keyValue);
|
||||
private final VascBackendListFeature proxyFeature;
|
||||
private final VascBackendListFeature proxyFeatureExtraFlag;
|
||||
|
||||
protected AbstractVascBackendProxyFeature(VascBackendListFeature proxyFeature,VascBackendListFeature proxyFeatureExtraFlag) {
|
||||
this.proxyFeature=proxyFeature;
|
||||
this.proxyFeatureExtraFlag=proxyFeatureExtraFlag;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the label
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#isProxyNeeded()
|
||||
*/
|
||||
public String getLabel() {
|
||||
return label;
|
||||
@Override
|
||||
final public boolean isProxyNeeded() {
|
||||
return !backend.getSupportedFeatures().contains(proxyFeature);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param label the label to set
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#getSupportedFeatures()
|
||||
*/
|
||||
public void setLabel(String label) {
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the value
|
||||
*/
|
||||
public Serializable getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param value the value to set
|
||||
*/
|
||||
public void setValue(Serializable value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the keyValue
|
||||
*/
|
||||
public String getKeyValue() {
|
||||
return keyValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param keyValue the keyValue to set
|
||||
*/
|
||||
public void setKeyValue(String keyValue) {
|
||||
this.keyValue = keyValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the disabled
|
||||
*/
|
||||
public boolean isDisabled() {
|
||||
return disabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param disabled the disabled to set
|
||||
*/
|
||||
public void setDisabled(boolean disabled) {
|
||||
this.disabled = disabled;
|
||||
@Override
|
||||
final public EnumSet<VascBackendListFeature> getSupportedFeatures() {
|
||||
EnumSet<VascBackendListFeature> result = super.getSupportedFeatures();
|
||||
result.add(proxyFeature);
|
||||
result.add(proxyFeatureExtraFlag);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
@ -24,7 +24,8 @@ package net.forwardfire.vasc.backend.proxy;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.VascBackendLifeCycle;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendList;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
|
||||
/**
|
||||
|
|
@ -33,11 +34,11 @@ import net.forwardfire.vasc.core.VascEntry;
|
|||
* @author Willem Cazander
|
||||
* @version 1.0 May 9, 2012
|
||||
*/
|
||||
public interface VascBackendProxy extends VascBackend<Serializable>,Cloneable {
|
||||
public interface VascBackendProxy<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends VascBackendList<DATA_PK,DATA_RECORD>,VascBackendLifeCycle<DATA_PK>,Cloneable {
|
||||
|
||||
void initProxy(VascBackend<Serializable> backend,VascEntry entry);
|
||||
void initProxy(VascBackendList<DATA_PK,DATA_RECORD> backend,VascEntry entry);
|
||||
|
||||
boolean isProxyNeeded();
|
||||
|
||||
VascBackendProxy clone() throws CloneNotSupportedException;
|
||||
VascBackendProxy<DATA_PK,DATA_RECORD> clone() throws CloneNotSupportedException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,167 +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.proxy;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
|
||||
/**
|
||||
* Does simple caching for the data.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Nov 19, 2009
|
||||
*/
|
||||
public class VascBackendProxyCache extends AbstractVascBackendProxy {
|
||||
|
||||
private VascBackendResult<Serializable> data = null;
|
||||
private String searchString = null;
|
||||
private Map<String,Object> dataState = null;
|
||||
private int pageIndex = 0;
|
||||
private int pageSize = 0;
|
||||
private int pageSizeMax = 0;
|
||||
private String sortField = null;
|
||||
private boolean sortDir = true;
|
||||
private boolean requestFlush = false;
|
||||
|
||||
public VascBackendProxyCache() {
|
||||
dataState = new HashMap<String,Object>(10);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see java.lang.Object#clone()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendProxy clone() throws CloneNotSupportedException {
|
||||
VascBackendProxyCache result = new VascBackendProxyCache();
|
||||
return result;
|
||||
}
|
||||
|
||||
private boolean isStateChanged(VascBackendState state) {
|
||||
boolean changed = false;
|
||||
for (String key:state.getDataParameterKeys()) {
|
||||
Object value = state.getDataParameter(key);
|
||||
Object valueLast = dataState.get(key);
|
||||
dataState.put(key, value);
|
||||
if (value==null & valueLast==null) {
|
||||
continue;
|
||||
}
|
||||
if (value==null & valueLast!=null) {
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
if (value.equals(valueLast)==false) {
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (state.getSortField()!=null && state.getSortField().equals(sortField)==false) {
|
||||
changed = true;
|
||||
}
|
||||
sortField = state.getSortField();
|
||||
if (state.isSortAscending()==sortDir) {
|
||||
changed = true;
|
||||
}
|
||||
sortDir = state.isSortAscending();
|
||||
|
||||
if (state.getPageSizeMax()==pageSizeMax) {
|
||||
changed = true;
|
||||
}
|
||||
pageSizeMax = state.getPageSizeMax();
|
||||
if (state.getPageSize()==pageSize) {
|
||||
changed = true;
|
||||
}
|
||||
pageSize = state.getPageSize();
|
||||
if (state.getPageIndex()==pageIndex) {
|
||||
changed = true;
|
||||
}
|
||||
pageIndex = state.getPageIndex();
|
||||
|
||||
if (state.getSearchString()!=null && state.getSearchString().equals(searchString)==false) {
|
||||
changed = true;
|
||||
}
|
||||
searchString = state.getSearchString();
|
||||
|
||||
if (requestFlush) {
|
||||
requestFlush = false;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#stopBackend()
|
||||
*/
|
||||
@Override
|
||||
public void stopBackend() {
|
||||
super.stopBackend();
|
||||
data = null;
|
||||
dataState.clear();
|
||||
requestFlush = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#execute(VascBackendState state)
|
||||
*/
|
||||
@Override
|
||||
public VascBackendResult<Serializable> execute(VascBackendState state) throws VascBackendException {
|
||||
boolean changed = isStateChanged(state);
|
||||
if (data==null | changed) {
|
||||
data = backend.execute(state);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#delete(java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public void delete(Serializable object) throws VascBackendException {
|
||||
requestFlush = true;
|
||||
super.delete(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#merge(java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public Serializable merge(Serializable object) throws VascBackendException {
|
||||
requestFlush = true;
|
||||
return super.merge(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#persist(java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public void persist(Serializable object) throws VascBackendException {
|
||||
requestFlush = true;
|
||||
super.persist(object);
|
||||
}
|
||||
}
|
||||
|
|
@ -26,10 +26,10 @@ import java.io.Serializable;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
import net.forwardfire.vasc.core.entry.VascEntryBackendEventListener;
|
||||
import net.forwardfire.vasc.core.entry.VascEntryBackendEventListener.VascBackendEventType;
|
||||
|
|
@ -40,7 +40,7 @@ import net.forwardfire.vasc.core.entry.VascEntryBackendEventListener.VascBackend
|
|||
* @author Willem Cazander
|
||||
* @version 1.0 Sep 21, 2010
|
||||
*/
|
||||
public class VascBackendProxyEventExecutor extends AbstractVascBackendProxy {
|
||||
public class VascBackendProxyEventExecutor<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractVascBackendProxy<DATA_PK,DATA_RECORD> {
|
||||
|
||||
private List<VascEntryBackendEventListener> listeners = null;
|
||||
|
||||
|
|
@ -48,13 +48,13 @@ public class VascBackendProxyEventExecutor extends AbstractVascBackendProxy {
|
|||
* @see java.lang.Object#clone()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendProxy clone() throws CloneNotSupportedException {
|
||||
VascBackendProxyEventExecutor result = new VascBackendProxyEventExecutor();
|
||||
public VascBackendProxy<DATA_PK,DATA_RECORD> clone() throws CloneNotSupportedException {
|
||||
VascBackendProxyEventExecutor<DATA_PK,DATA_RECORD> result = new VascBackendProxyEventExecutor<>();
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initProxy(VascBackend<Serializable> backend,VascEntry entry) {
|
||||
public void initProxy(VascBackendCrud<Serializable> backend,VascEntry entry) {
|
||||
super.initProxy(backend, entry);
|
||||
this.entry=entry;
|
||||
this.listeners=new ArrayList<VascEntryBackendEventListener>(10);
|
||||
|
|
@ -115,10 +115,10 @@ public class VascBackendProxyEventExecutor extends AbstractVascBackendProxy {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#doRecordMoveDownById(net.forwardfire.vasc.backend.VascBackendState, java.lang.Object)
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#doRecordMoveDownById(net.forwardfire.vasc.backend.list.VascBackendListRequest, java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public long doRecordMoveDownById(VascBackendState state, Object primaryId) throws VascBackendException {
|
||||
public long doRecordMoveDownById(VascBackendListRequest state, Object primaryId) throws VascBackendException {
|
||||
fireVascEvent(VascBackendEventType.PRE_MOVE_DOWN,primaryId);
|
||||
Long result = super.doRecordMoveDownById(state, primaryId);
|
||||
fireVascEvent(VascBackendEventType.POST_MOVE_DOWN,result);
|
||||
|
|
@ -126,10 +126,10 @@ public class VascBackendProxyEventExecutor extends AbstractVascBackendProxy {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#doRecordMoveUpById(net.forwardfire.vasc.backend.VascBackendState, java.lang.Object)
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#doRecordMoveUpById(net.forwardfire.vasc.backend.list.VascBackendListRequest, java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public long doRecordMoveUpById(VascBackendState state, Object primaryId) throws VascBackendException {
|
||||
public long doRecordMoveUpById(VascBackendListRequest state, Object primaryId) throws VascBackendException {
|
||||
fireVascEvent(VascBackendEventType.PRE_MOVE_UP,primaryId);
|
||||
Long result = super.doRecordMoveUpById(state, primaryId);
|
||||
fireVascEvent(VascBackendEventType.POST_MOVE_UP,result);
|
||||
|
|
@ -137,12 +137,12 @@ public class VascBackendProxyEventExecutor extends AbstractVascBackendProxy {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#execute(net.forwardfire.vasc.backend.VascBackendState)
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#execute(net.forwardfire.vasc.backend.list.VascBackendListRequest)
|
||||
*/
|
||||
@Override
|
||||
public VascBackendResult<Serializable> execute(VascBackendState state) throws VascBackendException {
|
||||
public VascBackendListResult<Serializable> execute(VascBackendListRequest state) throws VascBackendException {
|
||||
fireVascEvent(VascBackendEventType.PRE_EXECUTE,state);
|
||||
VascBackendResult<Serializable> result = super.execute(state);
|
||||
VascBackendListResult<Serializable> result = super.execute(state);
|
||||
fireVascEvent(VascBackendEventType.POST_EXECUTE,result);
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,12 +26,10 @@ import java.io.Serializable;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.DefaultVascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
import net.forwardfire.vasc.backend.list.DefaultVascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
|
||||
/**
|
||||
* Simple filter support
|
||||
|
|
@ -39,7 +37,7 @@ import net.forwardfire.vasc.core.VascEntry;
|
|||
* @author Willem Cazander
|
||||
* @version 1.0 Oct 27, 2007
|
||||
*/
|
||||
public class VascBackendProxyFilter extends AbstractVascBackendProxy {
|
||||
public class VascBackendProxyFilter<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractVascBackendProxy<DATA_PK,DATA_RECORD> {
|
||||
|
||||
private List<VascProxyFilter> filters = null;
|
||||
|
||||
|
|
@ -47,17 +45,16 @@ public class VascBackendProxyFilter extends AbstractVascBackendProxy {
|
|||
* @see java.lang.Object#clone()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendProxy clone() throws CloneNotSupportedException {
|
||||
VascBackendProxyFilter result = new VascBackendProxyFilter();
|
||||
public VascBackendProxy<DATA_PK,DATA_RECORD> clone() throws CloneNotSupportedException {
|
||||
VascBackendProxyFilter<DATA_PK,DATA_RECORD> result = new VascBackendProxyFilter<>();
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.VascBackendProxy#initProxy(net.forwardfire.vasc.backend.VascBackend, net.forwardfire.vasc.core.VascEntry)
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#startBackendProxy()
|
||||
*/
|
||||
@Override
|
||||
public void initProxy(VascBackend<Serializable> backend, VascEntry entry) {
|
||||
super.initProxy(backend,entry);
|
||||
protected void startBackendProxy() {
|
||||
filters = entry.getVascBackendFilters();
|
||||
for (VascProxyFilter filter:filters) {
|
||||
filter.initFilter(entry);
|
||||
|
|
@ -76,19 +73,19 @@ public class VascBackendProxyFilter extends AbstractVascBackendProxy {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#execute(VascBackendState state)
|
||||
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#execute(VascBackendListRequest state)
|
||||
*/
|
||||
@Override
|
||||
public VascBackendResult<Serializable> execute(VascBackendState state) throws VascBackendException {
|
||||
VascBackendResult<Serializable> result = backend.execute(state);
|
||||
public VascBackendListResult<Serializable> execute(VascBackendListRequest state) throws VascBackendException {
|
||||
VascBackendListResult<Serializable> result = backend.execute(state);
|
||||
if (filters==null) {
|
||||
return result;
|
||||
}
|
||||
if (filters.isEmpty()) {
|
||||
return result;
|
||||
}
|
||||
List<Serializable> search = new ArrayList<Serializable>(result.getPageData().size()/2);
|
||||
for (Serializable o:result.getPageData()) {
|
||||
List<Serializable> search = new ArrayList<Serializable>(result.getData().size()/2);
|
||||
for (Serializable o:result.getData()) {
|
||||
for (VascProxyFilter filter:filters) {
|
||||
Serializable r = filter.filterObject(o);
|
||||
if (r!=null) {
|
||||
|
|
@ -96,6 +93,6 @@ public class VascBackendProxyFilter extends AbstractVascBackendProxy {
|
|||
}
|
||||
}
|
||||
}
|
||||
return new DefaultVascBackendResult<Serializable>(search,search.size());
|
||||
return new DefaultVascBackendListResult<Serializable>(search,search.size());
|
||||
}
|
||||
}
|
||||
|
|
@ -26,10 +26,11 @@ import java.io.Serializable;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.DefaultVascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.list.DefaultVascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListFeature;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
|
||||
/**
|
||||
* Simulates a real pages backend.
|
||||
|
|
@ -37,42 +38,26 @@ import net.forwardfire.vasc.backend.VascBackendState;
|
|||
* @author Willem Cazander
|
||||
* @version 1.0 Oct 27, 2007
|
||||
*/
|
||||
public class VascBackendProxyPaged extends AbstractVascBackendProxy {
|
||||
public class VascBackendProxyPaged<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractVascBackendProxyFeature<DATA_PK,DATA_RECORD> {
|
||||
|
||||
public VascBackendProxyPaged() {
|
||||
super(VascBackendListFeature.PAGE_DATA,VascBackendListFeature.PAGE_DATA_PROXY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see java.lang.Object#clone()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendProxy clone() throws CloneNotSupportedException {
|
||||
VascBackendProxyPaged result = new VascBackendProxyPaged();
|
||||
return result;
|
||||
public VascBackendProxy<DATA_PK,DATA_RECORD> clone() throws CloneNotSupportedException {
|
||||
return new VascBackendProxyPaged<DATA_PK,DATA_RECORD>();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#isProxyNeeded()
|
||||
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#execute(VascBackendListRequest state)
|
||||
*/
|
||||
@Override
|
||||
public boolean isProxyNeeded() {
|
||||
if (backend.isPageable()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#isPageable()
|
||||
*/
|
||||
@Override
|
||||
public boolean isPageable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#execute(VascBackendState state)
|
||||
*/
|
||||
@Override
|
||||
public VascBackendResult<Serializable> execute(VascBackendState state) throws VascBackendException {
|
||||
VascBackendResult<Serializable> allData = backend.execute(state);
|
||||
public VascBackendListResult<DATA_RECORD> execute(VascBackendListRequest state) throws VascBackendException {
|
||||
VascBackendListResult<Serializable> allData = backend.execute(state);
|
||||
int pageSize = state.getPageSize();
|
||||
if (pageSize==0) {
|
||||
return allData;
|
||||
|
|
@ -81,12 +66,12 @@ public class VascBackendProxyPaged extends AbstractVascBackendProxy {
|
|||
int off = state.getPageIndex()*pageSize;
|
||||
int offMax = off+state.getPageSize();
|
||||
for (int i=off;i<offMax;i++) {
|
||||
if (i>=allData.getPageData().size()) {
|
||||
if (i>=allData.getData().size()) {
|
||||
break;
|
||||
}
|
||||
Serializable o = allData.getPageData().get(i);
|
||||
Serializable o = allData.getData().get(i);
|
||||
paged.add(o);
|
||||
}
|
||||
return new DefaultVascBackendResult<Serializable>(paged,allData.getPageData().size());
|
||||
return new DefaultVascBackendListResult<DATA_RECORD>(paged,allData.getData().size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,11 +26,12 @@ import java.io.Serializable;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.DefaultVascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.VascEntryFieldValue;
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
|
||||
import net.forwardfire.vasc.backend.list.DefaultVascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListFeature;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.core.VascEntryField;
|
||||
|
||||
/**
|
||||
|
|
@ -39,42 +40,27 @@ import net.forwardfire.vasc.core.VascEntryField;
|
|||
* @author Willem Cazander
|
||||
* @version 1.0 Oct 27, 2007
|
||||
*/
|
||||
public class VascBackendProxySearch extends AbstractVascBackendProxy {
|
||||
|
||||
public class VascBackendProxySearch<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractVascBackendProxyFeature<DATA_PK,DATA_RECORD> {
|
||||
|
||||
public VascBackendProxySearch() {
|
||||
super(VascBackendListFeature.TEXT_SEARCH,VascBackendListFeature.TEXT_SEARCH_PROXY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see java.lang.Object#clone()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendProxy clone() throws CloneNotSupportedException {
|
||||
VascBackendProxySearch result = new VascBackendProxySearch();
|
||||
public VascBackendProxy<DATA_PK,DATA_RECORD> clone() throws CloneNotSupportedException {
|
||||
VascBackendProxySearch<DATA_PK,DATA_RECORD> result = new VascBackendProxySearch<>();
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#isProxyNeeded()
|
||||
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#execute(VascBackendListRequest state)
|
||||
*/
|
||||
@Override
|
||||
public boolean isProxyNeeded() {
|
||||
if (backend.isSearchable()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#isSearchable()
|
||||
*/
|
||||
@Override
|
||||
public boolean isSearchable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#execute(VascBackendState state)
|
||||
*/
|
||||
@Override
|
||||
public VascBackendResult<Serializable> execute(VascBackendState state) throws VascBackendException {
|
||||
VascBackendResult<Serializable> result = backend.execute(state);
|
||||
public VascBackendListResult<Serializable> execute(VascBackendListRequest state) throws VascBackendException {
|
||||
VascBackendListResult<Serializable> result = backend.execute(state);
|
||||
if (state.getSearchString()==null) {
|
||||
return result;
|
||||
}
|
||||
|
|
@ -82,59 +68,21 @@ public class VascBackendProxySearch extends AbstractVascBackendProxy {
|
|||
return result;
|
||||
}
|
||||
String searchString = state.getSearchString().toLowerCase();
|
||||
List<Serializable> search = new ArrayList<Serializable>(result.getPageData().size()/4);
|
||||
for (Serializable record:result.getPageData()) {
|
||||
List<Serializable> search = new ArrayList<Serializable>(result.getData().size()/4);
|
||||
for (Serializable record:result.getData()) {
|
||||
for (VascEntryField field:entry.getVascEntryFields()) {
|
||||
VascEntryFieldValue<Serializable> fieldValue = backend.provideVascEntryFieldValue();
|
||||
VascBackendAccessDataRecord<Serializable,Serializable> fieldValue = backend.provideVascEntryFieldValue();
|
||||
Serializable value = fieldValue.getValue(field.getBackendName(), record);
|
||||
if (value==null) {
|
||||
continue; // can't search null values.
|
||||
}
|
||||
String r = value.toString().toLowerCase();
|
||||
if (r.contains(searchString)) {
|
||||
search.add(record);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
for (Method method:o.getClass().getMethods()) {
|
||||
if (method.getName().startsWith("get")==false) { //a bit durty
|
||||
continue;
|
||||
}
|
||||
if (method.getName().equals("getClass")) {
|
||||
continue;
|
||||
}
|
||||
if (method.getReturnType().isAssignableFrom(Collection.class)) {
|
||||
continue;
|
||||
}
|
||||
if (method.getReturnType().isAssignableFrom(List.class)) {
|
||||
continue;
|
||||
}
|
||||
if (method.getReturnType().isAssignableFrom(Set.class)) {
|
||||
continue;
|
||||
}
|
||||
if (method.getReturnType().isAssignableFrom(Map.class)) {
|
||||
continue;
|
||||
}
|
||||
Object res;
|
||||
try {
|
||||
res = method.invoke(o,new Object[]{});
|
||||
} catch (Exception e) {
|
||||
throw new VascException(e);
|
||||
if (r.contains(searchString)) {
|
||||
search.add(record);
|
||||
break;
|
||||
}
|
||||
if (res==null) {
|
||||
continue;
|
||||
}
|
||||
String r = res.toString().toLowerCase();
|
||||
if (r.contains(searchString)) {
|
||||
search.add(o);
|
||||
break;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
//records = search.size();
|
||||
return new DefaultVascBackendResult<Serializable>(search);
|
||||
return new DefaultVascBackendListResult<Serializable>(search);
|
||||
}
|
||||
}
|
||||
|
|
@ -27,9 +27,10 @@ import java.util.Collections;
|
|||
import java.util.Comparator;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.VascEntryFieldValue;
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListFeature;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.core.VascEntryField;
|
||||
|
||||
/**
|
||||
|
|
@ -38,28 +39,21 @@ import net.forwardfire.vasc.core.VascEntryField;
|
|||
* @author Willem Cazander
|
||||
* @version 1.0 Oct 27, 2007
|
||||
*/
|
||||
public class VascBackendProxySort extends AbstractVascBackendProxy {
|
||||
public class VascBackendProxySort<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractVascBackendProxyFeature<DATA_PK,DATA_RECORD> {
|
||||
|
||||
public VascBackendProxySort() {
|
||||
super(VascBackendListFeature.SORT_DATA,VascBackendListFeature.SORT_DATA_PROXY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see java.lang.Object#clone()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendProxy clone() throws CloneNotSupportedException {
|
||||
VascBackendProxySort result = new VascBackendProxySort();
|
||||
public VascBackendProxy<DATA_PK,DATA_RECORD> clone() throws CloneNotSupportedException {
|
||||
VascBackendProxySort<DATA_PK,DATA_RECORD> result = new VascBackendProxySort<>();
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#isProxyNeeded()
|
||||
*/
|
||||
@Override
|
||||
public boolean isProxyNeeded() {
|
||||
if (backend.isSortable()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public VascEntryField getVascEntryFieldByBackendName(String linkId) {
|
||||
for (VascEntryField a:entry.getVascEntryFields()) {
|
||||
if (a.getBackendName().equals(linkId)) {
|
||||
|
|
@ -70,31 +64,32 @@ public class VascBackendProxySort extends AbstractVascBackendProxy {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#execute(VascBackendState state)
|
||||
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#execute(VascBackendListRequest state)
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public VascBackendResult<Serializable> execute(final VascBackendState state) throws VascBackendException {
|
||||
VascBackendResult<Serializable> result = backend.execute(state);
|
||||
public VascBackendListResult<DATA_RECORD> execute(final VascBackendListRequest state) throws VascBackendException {
|
||||
VascBackendListResult<DATA_RECORD> result = backend.execute(state);
|
||||
if (state.getSortField()==null) {
|
||||
return result;
|
||||
}
|
||||
final VascEntryField field = getVascEntryFieldByBackendName(state.getSortField());
|
||||
final VascEntryFieldValue<Serializable> fieldValue = backend.provideVascEntryFieldValue();
|
||||
Collections.sort(result.getPageData(), new Comparator<Serializable>() {
|
||||
final VascBackendAccessDataRecord<Serializable,Serializable> fieldValue = backend.provideVascEntryFieldValue();
|
||||
Collections.sort(result.getData(), new Comparator<Serializable>() {
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Override
|
||||
public int compare(Serializable o1, Serializable o2) {
|
||||
try {
|
||||
Comparable c1 = null;
|
||||
Comparable c2 = null;
|
||||
if (field.getDisplayName()!=null) {
|
||||
c1 = fieldValue.getDisplayValue(field.getBackendName(), o1);
|
||||
c2 = fieldValue.getDisplayValue(field.getBackendName(), o2);
|
||||
} else {
|
||||
// if (field.getDisplayName()!=null) {
|
||||
// c1 = fieldValue.getValue(field.getBackendName(), o1);
|
||||
// c2 = fieldValue.getValue(field.getBackendName(), o2);
|
||||
// } else {
|
||||
// TODO: fix none Comparable goes toString
|
||||
c1 = (Comparable)fieldValue.getValue(field.getBackendName(), o1);
|
||||
c2 = (Comparable)fieldValue.getValue(field.getBackendName(), o2);
|
||||
}
|
||||
// }
|
||||
if (c1==null & c2==null) {
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ import java.util.logging.Level;
|
|||
import java.util.logging.Logger;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
|
||||
/**
|
||||
* Does simple timer logging for the backend actions.
|
||||
|
|
@ -36,7 +36,7 @@ import net.forwardfire.vasc.backend.VascBackendState;
|
|||
* @author Willem Cazander
|
||||
* @version 1.0 Nov 19, 2009
|
||||
*/
|
||||
public class VascBackendProxyTimerLogger extends AbstractVascBackendProxy {
|
||||
public class VascBackendProxyTimerLogger<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractVascBackendProxy<DATA_PK,DATA_RECORD> {
|
||||
|
||||
protected Logger logger = null;
|
||||
protected Level logLevel = Level.INFO;
|
||||
|
|
@ -49,17 +49,17 @@ public class VascBackendProxyTimerLogger extends AbstractVascBackendProxy {
|
|||
* @see java.lang.Object#clone()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendProxy clone() throws CloneNotSupportedException {
|
||||
VascBackendProxyTimerLogger result = new VascBackendProxyTimerLogger();
|
||||
public VascBackendProxy<DATA_PK,DATA_RECORD> clone() throws CloneNotSupportedException {
|
||||
VascBackendProxyTimerLogger<DATA_PK,DATA_RECORD> result = new VascBackendProxyTimerLogger<>();
|
||||
result.logLevel=logLevel;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#execute(VascBackendState state)
|
||||
* @see net.forwardfire.vasc.backend.crud.VascBackendCrud#execute(VascBackendListRequest state)
|
||||
*/
|
||||
@Override
|
||||
public VascBackendResult<Serializable> execute(VascBackendState state) throws VascBackendException {
|
||||
public VascBackendListResult<Serializable> execute(VascBackendListRequest state) throws VascBackendException {
|
||||
long t1 = System.currentTimeMillis();
|
||||
try {
|
||||
return backend.execute(state);
|
||||
|
|
@ -70,13 +70,13 @@ public class VascBackendProxyTimerLogger extends AbstractVascBackendProxy {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#doRecordMoveDownById(net.forwardfire.vasc.backend.VascBackendState, java.lang.Object)
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#doRecordMoveDownById(net.forwardfire.vasc.backend.list.VascBackendListRequest, java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public long doRecordMoveDownById(VascBackendState state, Object primaryId) throws VascBackendException {
|
||||
public long doRecordMoveDownById(VascBackendListRequest request,Serializable recordPK) throws VascBackendException {
|
||||
long t1 = System.currentTimeMillis();
|
||||
try {
|
||||
return backend.doRecordMoveDownById(state, primaryId);
|
||||
return backend.doRecordMoveDownById(request, recordPK);
|
||||
} finally {
|
||||
long t2 = System.currentTimeMillis();
|
||||
logger.log(logLevel,"vasc-doRecordMoveDownById backend: "+getId()+" in "+(t2-t1)+" ms");
|
||||
|
|
@ -84,61 +84,19 @@ public class VascBackendProxyTimerLogger extends AbstractVascBackendProxy {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#doRecordMoveUpById(net.forwardfire.vasc.backend.VascBackendState, java.lang.Object)
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#doRecordMoveUpById(net.forwardfire.vasc.backend.list.VascBackendListRequest, java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public long doRecordMoveUpById(VascBackendState state, Object primaryId) throws VascBackendException {
|
||||
public long doRecordMoveUpById(VascBackendListRequest request,Serializable recordPK) throws VascBackendException {
|
||||
long t1 = System.currentTimeMillis();
|
||||
try {
|
||||
return backend.doRecordMoveUpById(state, primaryId);
|
||||
return backend.doRecordMoveUpById(request, recordPK);
|
||||
} finally {
|
||||
long t2 = System.currentTimeMillis();
|
||||
logger.log(logLevel,"vasc-doRecordMoveUpById backend: "+getId()+" in "+(t2-t1)+" ms");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#delete(java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public void delete(Serializable object) throws VascBackendException {
|
||||
long t1 = System.currentTimeMillis();
|
||||
try {
|
||||
backend.delete(object);
|
||||
} finally {
|
||||
long t2 = System.currentTimeMillis();
|
||||
logger.log(logLevel,"vasc-delete backend: "+getId()+" in "+(t2-t1)+" ms");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#merge(java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public Serializable merge(Serializable object) throws VascBackendException {
|
||||
long t1 = System.currentTimeMillis();
|
||||
try {
|
||||
return backend.merge(object);
|
||||
} finally {
|
||||
long t2 = System.currentTimeMillis();
|
||||
logger.log(logLevel,"vasc-merge backend: "+getId()+" in "+(t2-t1)+" ms");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.proxy.AbstractVascBackendProxy#persist(java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public void persist(Serializable object) throws VascBackendException {
|
||||
long t1 = System.currentTimeMillis();
|
||||
try {
|
||||
backend.persist(object);
|
||||
} finally {
|
||||
long t2 = System.currentTimeMillis();
|
||||
logger.log(logLevel,"vasc-persist backend: "+getId()+" in "+(t2-t1)+" ms");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the logLevel
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import java.io.Serializable;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascEntryFieldValue;
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
|
||||
import net.forwardfire.vasc.core.base.AbstractVascBaseIdRoleCrudOrderMetaLocal;
|
||||
import net.forwardfire.vasc.validators.VascValidator;
|
||||
|
||||
|
|
@ -43,7 +43,7 @@ abstract public class AbstractVascEntryFieldLocal extends AbstractVascBaseIdRole
|
|||
private String backendName = null;
|
||||
private String displayName = null;
|
||||
private VascEntryFieldType vascEntryFieldType = null;
|
||||
private VascEntryFieldValue<Serializable> vascEntryFieldValue = null;
|
||||
private VascBackendAccessDataRecord<Serializable,Serializable> vascEntryFieldValue = null;
|
||||
private List<VascValidator> vascValidators = null;
|
||||
private Serializable defaultValue = null;
|
||||
private Integer sizeList = null;
|
||||
|
|
@ -147,7 +147,7 @@ abstract public class AbstractVascEntryFieldLocal extends AbstractVascBaseIdRole
|
|||
* @return the vascEntryFieldValue
|
||||
*/
|
||||
@Override
|
||||
public VascEntryFieldValue<Serializable> getVascEntryFieldValue() {
|
||||
public VascBackendAccessDataRecord<Serializable,Serializable> getVascEntryFieldValue() {
|
||||
return vascEntryFieldValue;
|
||||
}
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ abstract public class AbstractVascEntryFieldLocal extends AbstractVascBaseIdRole
|
|||
* @param vascEntryFieldValue the vascEntryFieldValue to set
|
||||
*/
|
||||
@Override
|
||||
public void setVascEntryFieldValue(VascEntryFieldValue<Serializable> vascEntryFieldValue) {
|
||||
public void setVascEntryFieldValue(VascBackendAccessDataRecord<Serializable,Serializable> vascEntryFieldValue) {
|
||||
this.vascEntryFieldValue = vascEntryFieldValue;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
|
||||
/**
|
||||
* Holds all default state values
|
||||
|
|
@ -43,11 +43,11 @@ abstract public class AbstractVascEntryState implements VascEntryState {
|
|||
private List<Serializable> entryDataList = null;
|
||||
private Serializable entryDataObject = null;
|
||||
private Long totalBackendRecords = null;
|
||||
private VascBackendState vascBackendState = null;
|
||||
private VascBackendListRequest vascBackendState = null;
|
||||
private VascEntryState state = null;
|
||||
private Map<Integer,Boolean> multiActionSelection = null;
|
||||
private boolean isEditCreate = false;
|
||||
private VascBackend<Serializable> vascBackend = null;
|
||||
private VascBackendCrud<Serializable,Serializable> vascBackend = null;
|
||||
private VascEntry vascEntry = null;
|
||||
|
||||
public AbstractVascEntryState() {
|
||||
|
|
@ -91,7 +91,7 @@ abstract public class AbstractVascEntryState implements VascEntryState {
|
|||
* @return the vascBackendState
|
||||
*/
|
||||
@Override
|
||||
public VascBackendState getVascBackendState() {
|
||||
public VascBackendListRequest getVascBackendState() {
|
||||
return vascBackendState;
|
||||
}
|
||||
|
||||
|
|
@ -99,7 +99,7 @@ abstract public class AbstractVascEntryState implements VascEntryState {
|
|||
* @param vascBackendState the vascBackendState to set
|
||||
*/
|
||||
@Override
|
||||
public void setVascBackendState(VascBackendState vascBackendState) {
|
||||
public void setVascBackendState(VascBackendListRequest vascBackendState) {
|
||||
this.vascBackendState = vascBackendState;
|
||||
}
|
||||
|
||||
|
|
@ -143,7 +143,7 @@ abstract public class AbstractVascEntryState implements VascEntryState {
|
|||
* @return the vascBackend
|
||||
*/
|
||||
@Override
|
||||
public VascBackend<Serializable> getVascBackend() {
|
||||
public VascBackendCrud<Serializable,Serializable> getVascBackend() {
|
||||
return vascBackend;
|
||||
}
|
||||
|
||||
|
|
@ -151,7 +151,7 @@ abstract public class AbstractVascEntryState implements VascEntryState {
|
|||
* @param vascBackend the vascBackend to set
|
||||
*/
|
||||
@Override
|
||||
public void setVascBackend(VascBackend<Serializable> vascBackend) {
|
||||
public void setVascBackend(VascBackendCrud<Serializable,Serializable> vascBackend) {
|
||||
this.vascBackend = vascBackend;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ package net.forwardfire.vasc.core;
|
|||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
|
||||
import net.forwardfire.vasc.core.entry.VascEntryExport;
|
||||
import net.forwardfire.vasc.core.VascException;
|
||||
|
||||
|
|
@ -46,9 +46,9 @@ public interface VascEntryConfigController {
|
|||
|
||||
void configVascEntry(VascController vascController,VascEntryLocal vascEntry) throws VascException;
|
||||
|
||||
VascBackend<Serializable> configVascBackendProxied(VascController vascController,VascEntry vascEntry) throws VascException;
|
||||
VascBackendCrud<Serializable,Serializable> configVascBackendProxied(VascController vascController,VascEntry vascEntry) throws VascException;
|
||||
|
||||
VascBackend<Serializable> configVascBackendProxied(VascController vascController,VascEntry vascEntry,VascBackend<Serializable> realBackend) throws VascException;
|
||||
VascBackendCrud<Serializable,Serializable> configVascBackendProxied(VascController vascController,VascEntry vascEntry,VascBackendCrud<Serializable,Serializable> realBackend) throws VascException;
|
||||
|
||||
List<String> getVascEntryExporterIds();
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ package net.forwardfire.vasc.core;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.backend.proxy.VascBackendProxy;
|
||||
import net.forwardfire.vasc.core.entry.VascEntryExport;
|
||||
import net.forwardfire.vasc.core.entry.VascEntryFieldValidatorService;
|
||||
|
|
@ -60,7 +60,7 @@ public interface VascEntryConfigControllerLocal extends VascEntryConfigControlle
|
|||
void removeVascEntryExporter(VascEntryExport exporter);
|
||||
|
||||
|
||||
VascBackendState getMasterVascBackendState();
|
||||
VascBackendListRequest getMasterVascBackendState();
|
||||
|
||||
void setResourceBundle(String resourceBundle);
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ package net.forwardfire.vasc.core;
|
|||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascEntryFieldValue;
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
|
||||
import net.forwardfire.vasc.core.base.VascBaseIdRoleCrudOrderMeta;
|
||||
import net.forwardfire.vasc.validators.VascValidator;
|
||||
|
||||
|
|
@ -56,7 +56,7 @@ public interface VascEntryField extends VascBaseIdRoleCrudOrderMeta {
|
|||
/**
|
||||
* @return the vascEntryFieldValue
|
||||
*/
|
||||
VascEntryFieldValue<Serializable> getVascEntryFieldValue();
|
||||
VascBackendAccessDataRecord<Serializable,Serializable> getVascEntryFieldValue();
|
||||
|
||||
/**
|
||||
* @return the vascValidators
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ package net.forwardfire.vasc.core;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascEntryFieldValue;
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
|
||||
import net.forwardfire.vasc.core.base.VascBaseIdRoleCrudOrderMetaLocal;
|
||||
import net.forwardfire.vasc.validators.VascValidator;
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ public interface VascEntryFieldLocal extends VascEntryField,VascBaseIdRoleCrudOr
|
|||
/**
|
||||
* @param vascEntryFieldValue the vascEntryFieldValue to set
|
||||
*/
|
||||
void setVascEntryFieldValue(VascEntryFieldValue<Serializable> vascEntryFieldValue);
|
||||
void setVascEntryFieldValue(VascBackendAccessDataRecord<Serializable,Serializable> vascEntryFieldValue);
|
||||
|
||||
/**
|
||||
* @param vascValidator the vascValidator to add
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@ import java.io.Serializable;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
|
||||
/**
|
||||
* Holds all the data for state.
|
||||
|
|
@ -61,12 +61,12 @@ public interface VascEntryState extends Serializable {
|
|||
/**
|
||||
* @return the vascBackendState
|
||||
*/
|
||||
VascBackendState getVascBackendState();
|
||||
VascBackendListRequest getVascBackendState();
|
||||
|
||||
/**
|
||||
* @param vascBackendState the vascBackendState to set
|
||||
*/
|
||||
void setVascBackendState(VascBackendState vascBackendState);
|
||||
void setVascBackendState(VascBackendListRequest vascBackendState);
|
||||
|
||||
/**
|
||||
* @return the totalBackendRecords
|
||||
|
|
@ -97,12 +97,12 @@ public interface VascEntryState extends Serializable {
|
|||
/**
|
||||
* @return the vascBackend
|
||||
*/
|
||||
public VascBackend<Serializable> getVascBackend();
|
||||
public VascBackendCrud<Serializable,Serializable> getVascBackend();
|
||||
|
||||
/**
|
||||
* @param vascBackend the vascBackend to set
|
||||
*/
|
||||
void setVascBackend(VascBackend<Serializable> vascBackend);
|
||||
void setVascBackend(VascBackendCrud<Serializable,Serializable> vascBackend);
|
||||
|
||||
/**
|
||||
* @return the isEditCreate
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
package net.forwardfire.vasc.core;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.frontend.VascFrontendActions;
|
||||
import net.forwardfire.vasc.frontend.VascFrontendControllerLocal;
|
||||
import net.forwardfire.vasc.frontend.VascFrontendDataSelector;
|
||||
|
|
@ -19,7 +19,7 @@ public interface VascInterfaceLoader {
|
|||
|
||||
|
||||
VascEntryState createVascEntryStateImpl();
|
||||
VascBackendState createVascBackendStateImpl();
|
||||
VascBackendListRequest createVascBackendStateImpl();
|
||||
VascFrontendControllerLocal createVascFrontendControllerLocalImpl();
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ package net.forwardfire.vasc.core.ui;
|
|||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.select.VascBackendSelectItem;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
import net.forwardfire.vasc.core.VascException;
|
||||
|
||||
|
|
@ -42,7 +43,7 @@ public interface VascSelectItemModel extends Serializable {
|
|||
* @return
|
||||
* @throws VascException
|
||||
*/
|
||||
List<VascSelectItem> getVascSelectItems(VascEntry entry) throws VascException;
|
||||
List<VascBackendSelectItem> getVascSelectItems(VascEntry entry) throws VascException;
|
||||
|
||||
/**
|
||||
* @return the nullLabel
|
||||
|
|
|
|||
|
|
@ -30,10 +30,10 @@ import java.util.Locale;
|
|||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import net.forwardfire.vasc.backend.DefaultVascBackendState;
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.VascEntryFieldValue;
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
|
||||
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
|
||||
import net.forwardfire.vasc.backend.list.DefaultVascBackendListRequest;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.backend.proxy.VascBackendProxy;
|
||||
import net.forwardfire.vasc.core.VascController;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
|
|
@ -69,7 +69,7 @@ public class DefaultVascEntryConfigController implements VascEntryConfigControll
|
|||
private Map<VascInterfaceKey,Class<?>> vascInterfaceImpls = null;
|
||||
private Map<VascInterfaceKeyFrontend,Class<?>> vascInterfaceImplFrontends = null;
|
||||
private VascInterfaceLoader vascInterfaceLoader = null;
|
||||
private VascBackendState masterVascBackendState = null;
|
||||
private VascBackendListRequest masterVascBackendState = null;
|
||||
private String resourceBundle = null;
|
||||
|
||||
public DefaultVascEntryConfigController() {
|
||||
|
|
@ -80,7 +80,7 @@ public class DefaultVascEntryConfigController implements VascEntryConfigControll
|
|||
vascInterfaceImpls = new HashMap<VascInterfaceKey,Class<?>>(VascInterfaceKey.values().length);
|
||||
vascInterfaceImplFrontends = new HashMap<VascInterfaceKeyFrontend,Class<?>>(VascInterfaceKeyFrontend.values().length);
|
||||
vascInterfaceLoader = new DefaultVascInterfaceLoader(this);
|
||||
masterVascBackendState = new DefaultVascBackendState();
|
||||
masterVascBackendState = new DefaultVascBackendListRequest();
|
||||
masterVascBackendState.setPageSize(100);
|
||||
masterVascBackendState.setPageSizeMax(1500);
|
||||
}
|
||||
|
|
@ -177,8 +177,8 @@ public class DefaultVascEntryConfigController implements VascEntryConfigControll
|
|||
* @see net.forwardfire.vasc.core.VascEntryConfigController#configVascBackendProxied(net.forwardfire.vasc.core.VascController, net.forwardfire.vasc.core.VascEntry)
|
||||
*/
|
||||
@Override
|
||||
public VascBackend<Serializable> configVascBackendProxied(VascController vascController,VascEntry vascEntry) throws VascException {
|
||||
VascBackend<Serializable> realBackend = vascController.getVascBackendController().getVascBackendById(vascEntry.getBackendId());
|
||||
public VascBackendCrud<Serializable,Serializable> configVascBackendProxied(VascController vascController,VascEntry vascEntry) throws VascException {
|
||||
VascBackendCrud<Serializable,Serializable> realBackend = vascController.getVascBackendController().getVascBackendById(VascBackendCrud.class,vascEntry.getBackendId());
|
||||
if (realBackend==null) {
|
||||
throw new VascException("Could not find backend: "+vascEntry.getBackendId());
|
||||
}
|
||||
|
|
@ -186,11 +186,11 @@ public class DefaultVascEntryConfigController implements VascEntryConfigControll
|
|||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.core.VascEntryConfigController#configVascBackendProxied(net.forwardfire.vasc.core.VascController, net.forwardfire.vasc.core.VascEntry, net.forwardfire.vasc.backend.VascBackend)
|
||||
* @see net.forwardfire.vasc.core.VascEntryConfigController#configVascBackendProxied(net.forwardfire.vasc.core.VascController, net.forwardfire.vasc.core.VascEntry, net.forwardfire.vasc.backend.crud.VascBackendCrud)
|
||||
*/
|
||||
@Override
|
||||
public VascBackend<Serializable> configVascBackendProxied(VascController vascController,VascEntry vascEntry, VascBackend<Serializable> realBackend) throws VascException {
|
||||
VascBackend<Serializable> backend = realBackend;
|
||||
public VascBackendCrud<Serializable,Serializable> configVascBackendProxied(VascController vascController,VascEntry vascEntry, VascBackendCrud<Serializable,Serializable> realBackend) throws VascException {
|
||||
VascBackendCrud<Serializable,Serializable> backend = realBackend;
|
||||
for (VascBackendProxy proxy:backendProxies) {
|
||||
VascBackendProxy proxyClone;
|
||||
try {
|
||||
|
|
@ -217,7 +217,7 @@ public class DefaultVascEntryConfigController implements VascEntryConfigControll
|
|||
// get the interface loader and create some impl objects
|
||||
VascInterfaceLoader loader = getVascInterfaceLoader();
|
||||
VascFrontendControllerLocal controller = loader.createVascFrontendControllerLocalImpl();
|
||||
VascBackendState backendState = loader.createVascBackendStateImpl();
|
||||
VascBackendListRequest backendState = loader.createVascBackendStateImpl();
|
||||
VascEntryState state = loader.createVascEntryStateImpl();
|
||||
|
||||
// Add impl to tree
|
||||
|
|
@ -234,7 +234,7 @@ public class DefaultVascEntryConfigController implements VascEntryConfigControll
|
|||
controller.setVascFrontendUserSettingController( loader.createVascFrontendUserSettingControllerImpl(entry));
|
||||
|
||||
// Config backend state from master template
|
||||
VascBackendState master = getMasterVascBackendState();
|
||||
VascBackendListRequest master = getMasterVascBackendState();
|
||||
for (String key:master.getDataParameterKeys()) {
|
||||
backendState.setDataParameter(key, master.getDataParameter(key));
|
||||
}
|
||||
|
|
@ -257,14 +257,14 @@ public class DefaultVascEntryConfigController implements VascEntryConfigControll
|
|||
}
|
||||
|
||||
// Add backend to entry
|
||||
VascBackend<Serializable> backend = vascController.getVascEntryConfigController().configVascBackendProxied(vascController, entry);
|
||||
VascBackendCrud<Serializable,Serializable> backend = vascController.getVascEntryConfigController().configVascBackendProxied(vascController, entry);
|
||||
controller.getVascEntryState().setVascBackend(backend);
|
||||
controller.getVascEntryState().setVascEntry(entry);
|
||||
|
||||
// Fetch all data field value impl for this backend.
|
||||
for (VascEntryField field:entry.getVascEntryFields()) {
|
||||
if (field.getVascEntryFieldValue()==null) {
|
||||
VascEntryFieldValue<Serializable> v = backend.provideVascEntryFieldValue();
|
||||
VascBackendAccessDataRecord<Serializable,Serializable> v = backend.provideVascEntryFieldValue();
|
||||
((VascEntryFieldLocal)field).setVascEntryFieldValue(v);
|
||||
}
|
||||
}
|
||||
|
|
@ -422,7 +422,7 @@ public class DefaultVascEntryConfigController implements VascEntryConfigControll
|
|||
* @see net.forwardfire.vasc.core.VascEntryConfigControllerLocal#getMasterVascBackendState()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendState getMasterVascBackendState() {
|
||||
public VascBackendListRequest getMasterVascBackendState() {
|
||||
return masterVascBackendState;
|
||||
}
|
||||
}
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
package net.forwardfire.vasc.impl;
|
||||
|
||||
import net.forwardfire.vasc.backend.DefaultVascBackendController;
|
||||
import net.forwardfire.vasc.backend.DefaultVascBackendState;
|
||||
import net.forwardfire.vasc.backend.list.DefaultVascBackendListRequest;
|
||||
import net.forwardfire.vasc.backend.proxy.VascBackendProxyCache;
|
||||
import net.forwardfire.vasc.backend.proxy.VascBackendProxyEventExecutor;
|
||||
import net.forwardfire.vasc.backend.proxy.VascBackendProxyFilter;
|
||||
|
|
@ -73,7 +73,7 @@ public class DefaultVascFactory {
|
|||
vascConfig.putVascInterfaceImplemention(VascInterfaceKey.VASC_ENTRY_LINK, DefaultVascEntryLink.class);
|
||||
vascConfig.putVascInterfaceImplemention(VascInterfaceKey.VASC_ENTRY_LIST_OPTION, DefaultVascEntryListOption.class);
|
||||
|
||||
vascConfig.putVascInterfaceImplemention(VascInterfaceKey.VASC_BACKEND_STATE, DefaultVascBackendState.class);
|
||||
vascConfig.putVascInterfaceImplemention(VascInterfaceKey.VASC_BACKEND_STATE, DefaultVascBackendListRequest.class);
|
||||
vascConfig.putVascInterfaceImplemention(VascInterfaceKey.VASC_FRONTEND_CONTROLLER_LOCAL, DefaultVascFrontendController.class);
|
||||
|
||||
vascConfig.putVascInterfaceImplementionFrontend(VascInterfaceKeyFrontend.VASC_FRONTEND_ACTIONS, DefaultVascFrontendActions.class);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
package net.forwardfire.vasc.impl;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
import net.forwardfire.vasc.core.VascEntryConfigControllerLocal;
|
||||
import net.forwardfire.vasc.core.VascEntryField;
|
||||
|
|
@ -114,8 +114,8 @@ public class DefaultVascInterfaceLoader implements VascInterfaceLoader {
|
|||
* @see net.forwardfire.vasc.core.VascInterfaceLoader#createVascBackendStateImpl()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendState createVascBackendStateImpl() {
|
||||
return (VascBackendState)createImpl(VascInterfaceKey.VASC_BACKEND_STATE);
|
||||
public VascBackendListRequest createVascBackendStateImpl() {
|
||||
return (VascBackendListRequest)createImpl(VascInterfaceKey.VASC_BACKEND_STATE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
package net.forwardfire.vasc.impl.entry;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
import net.forwardfire.vasc.core.entry.VascEntryBackendEventListener;
|
||||
|
||||
|
|
@ -74,8 +74,8 @@ public class SetParameterBackendListener implements VascEntryBackendEventListene
|
|||
*/
|
||||
@Override
|
||||
public void vascEvent(VascEntry entry, Object data) {
|
||||
if (data instanceof VascBackendState) {
|
||||
VascBackendState state = (VascBackendState)data;
|
||||
if (data instanceof VascBackendListRequest) {
|
||||
VascBackendListRequest state = (VascBackendListRequest)data;
|
||||
if (isUserValue) {
|
||||
if (value==null) {
|
||||
value="id";
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import java.util.Locale;
|
|||
|
||||
import org.x4o.xml.conv.ObjectConverterException;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
|
||||
import net.forwardfire.vasc.core.VascController;
|
||||
import net.forwardfire.vasc.core.VascEntryField;
|
||||
import net.forwardfire.vasc.core.VascEntryConfigFinalizer;
|
||||
|
|
@ -59,7 +59,7 @@ public class VascDefaultsFinalizer implements VascEntryConfigFinalizer {
|
|||
}
|
||||
|
||||
// Check if backendId is valid
|
||||
VascBackend<Serializable> back = vascController.getVascBackendController().getVascBackendById( entry.getBackendId() );
|
||||
VascBackendCrud<Serializable,Serializable> back = vascController.getVascBackendController().getVascBackendById( VascBackendCrud.class, entry.getBackendId() );
|
||||
if (back==null) {
|
||||
throw new IllegalArgumentException("The VascEntry backend is not found in backends: '"+entry.getBackendId()+"' in entryId: "+id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ package net.forwardfire.vasc.impl.entry.config;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
|
||||
import net.forwardfire.vasc.core.VascController;
|
||||
import net.forwardfire.vasc.core.VascEntryField;
|
||||
import net.forwardfire.vasc.core.VascEntryFieldSet;
|
||||
|
|
@ -68,7 +68,7 @@ public class VascIdCheckFinalizer implements VascEntryConfigFinalizer {
|
|||
}
|
||||
|
||||
// Check if backendId is valid
|
||||
VascBackend<Serializable> back = vascController.getVascBackendController().getVascBackendById( entry.getBackendId() );
|
||||
VascBackendCrud<Serializable> back = vascController.getVascBackendController().getVascBackendById( entry.getBackendId() );
|
||||
if (back==null) {
|
||||
throw new IllegalArgumentException("The VascEntry backend is not found in backends: '"+entry.getBackendId()+"' in entryId: "+id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ import java.util.Date;
|
|||
import java.util.logging.Logger;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.backend.proxy.VascProxyFilter;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
import net.forwardfire.vasc.core.VascEntryField;
|
||||
|
|
@ -210,7 +210,7 @@ public class DefaultVascFrontendActions implements VascFrontendActions {
|
|||
// Fire pre read event
|
||||
entry.getVascFrontendController().fireVascFrontendEvent(entry,VascEntryFrontendEventListener.VascFrontendEventType.PRE_READ, null);
|
||||
entry.getVascFrontendController().getVascEntryState().setEntryDataObject(null);
|
||||
VascBackendState backendState = entry.getVascFrontendController().getVascEntryState().getVascBackendState();
|
||||
VascBackendListRequest backendState = entry.getVascFrontendController().getVascEntryState().getVascBackendState();
|
||||
|
||||
// check and correct max page size
|
||||
if (backendState.getPageSize() > backendState.getPageSizeMax()) {
|
||||
|
|
@ -226,7 +226,7 @@ public class DefaultVascFrontendActions implements VascFrontendActions {
|
|||
}
|
||||
}
|
||||
|
||||
VascBackendResult<Serializable> result;
|
||||
VascBackendListResult<Serializable> result;
|
||||
try {
|
||||
result = entry.getVascFrontendController().getVascEntryState().getVascBackend().execute(backendState);
|
||||
} catch (VascBackendException ve) {
|
||||
|
|
@ -234,11 +234,11 @@ public class DefaultVascFrontendActions implements VascFrontendActions {
|
|||
}
|
||||
|
||||
// Set data in frontend
|
||||
entry.getVascFrontendController().getVascEntryState().setEntryDataList(result.getPageData());
|
||||
entry.getVascFrontendController().getVascEntryState().setTotalBackendRecords(result.getTotalSize());
|
||||
entry.getVascFrontendController().getVascEntryState().setEntryDataList(result.getData());
|
||||
entry.getVascFrontendController().getVascEntryState().setTotalBackendRecords(result.getTotalRecordCount());
|
||||
|
||||
// check if we need to change the current page if table size if changed in between
|
||||
int pages = new Long(result.getTotalSize()/backendState.getPageSize()).intValue();
|
||||
int pages = new Long(result.getTotalRecordCount()/backendState.getPageSize()).intValue();
|
||||
if (backendState.getPageIndex() > pages) {
|
||||
backendState.setPageIndex(pages);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import java.util.List;
|
|||
import java.util.logging.Logger;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascEntryFieldValue;
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
import net.forwardfire.vasc.core.VascEntryField;
|
||||
import net.forwardfire.vasc.core.VascEntryLink;
|
||||
|
|
@ -202,10 +202,10 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
|
|||
return "no-selection";
|
||||
}
|
||||
VascEntryField v = entry.getVascEntryFieldById(entry.getDisplayNameFieldId());
|
||||
VascEntryFieldValue<Serializable> ve = v.getVascEntryFieldValue();
|
||||
VascBackendAccessDataRecord<Serializable,Serializable> ve = v.getVascEntryFieldValue();
|
||||
String result = "no-data";
|
||||
try {
|
||||
result = ve.getDisplayValue(v.getBackendName(), row);
|
||||
result = ""+ve.getValue(v.getBackendName(), row);
|
||||
} catch (VascBackendException e) {
|
||||
throw new RuntimeException("Could not get selected name DisplayValue: "+e.getMessage(),e);
|
||||
}
|
||||
|
|
@ -224,10 +224,10 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
|
|||
return "no-selection";
|
||||
}
|
||||
VascEntryField v = parent.getVascEntryFieldById(parent.getDisplayNameFieldId());
|
||||
VascEntryFieldValue<Serializable> ve = v.getVascEntryFieldValue();
|
||||
VascBackendAccessDataRecord<Serializable,Serializable> ve = v.getVascEntryFieldValue();
|
||||
String result = "no-data";
|
||||
try {
|
||||
result = ve.getDisplayValue(v.getBackendName(), row);
|
||||
result = ""+ve.getValue(v.getBackendName(), row);
|
||||
} catch (VascBackendException e) {
|
||||
throw new RuntimeException("Could not get parent name DisplayValue: "+e.getMessage(),e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import java.io.Serializable;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
import net.forwardfire.vasc.core.entry.VascEntryFrontendEventListener;
|
||||
import net.forwardfire.vasc.frontend.VascFrontendPageInfoNumber;
|
||||
|
|
@ -156,7 +156,7 @@ public class DefaultVascFrontendPager implements VascFrontendPageInfo {
|
|||
@Override
|
||||
public List<VascFrontendPageInfoNumber> getTablePagesFromBackend() {
|
||||
List<VascFrontendPageInfoNumber> result = new ArrayList<VascFrontendPageInfoNumber>(30);
|
||||
VascBackendState state = entry.getVascFrontendController().getVascEntryState().getVascBackendState();
|
||||
VascBackendListRequest state = entry.getVascFrontendController().getVascEntryState().getVascBackendState();
|
||||
if (state.getPageSize()==0) {
|
||||
return result; // paging disabled
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@ import javax.naming.RefAddr;
|
|||
import javax.naming.Reference;
|
||||
import javax.naming.spi.ObjectFactory;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.VascBackendController;
|
||||
import net.forwardfire.vasc.backend.VascBackendControllerLocal;
|
||||
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
|
||||
import net.forwardfire.vasc.core.VascController;
|
||||
import net.forwardfire.vasc.core.VascControllerLocal;
|
||||
import net.forwardfire.vasc.core.VascControllerProvider;
|
||||
|
|
@ -130,7 +130,7 @@ public class JndiVascControllerFactory implements ObjectFactory {
|
|||
return backendController.getVascBackendIds();
|
||||
}
|
||||
@Override
|
||||
public VascBackend<Serializable> getVascBackendById(String id) {
|
||||
public VascBackendCrud<Serializable> getVascBackendById(String id) {
|
||||
return backendController.getVascBackendById(id);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,318 +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.impl.ui;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import net.forwardfire.vasc.backend.DefaultVascBackendState;
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.VascEntryFieldValue;
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
import net.forwardfire.vasc.core.VascEntryField;
|
||||
import net.forwardfire.vasc.core.VascEntryFieldLocal;
|
||||
import net.forwardfire.vasc.core.VascEntryLocal;
|
||||
import net.forwardfire.vasc.core.ui.VascSelectItem;
|
||||
import net.forwardfire.vasc.core.ui.VascSelectItemModel;
|
||||
import net.forwardfire.vasc.core.VascException;
|
||||
|
||||
/**
|
||||
* The DefaultVascSelectItemModel
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Oct 27, 2007
|
||||
*/
|
||||
public class VascSelectItemModelEntry implements VascSelectItemModel {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private String entryId = null;
|
||||
private String keyFieldId = null;
|
||||
private String displayFieldId = null;
|
||||
private String nullLabel = null;
|
||||
private String nullKeyValue = null;
|
||||
private String nullObjectValue = null;
|
||||
private Boolean returnKeyValue = null;
|
||||
private Map<String,String> entryParameterFieldIds = new HashMap<String,String>(3);
|
||||
private Boolean useParentFields = null;
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.core.ui.VascSelectItemModel#getVascSelectItems(net.forwardfire.vasc.core.VascEntry)
|
||||
*/
|
||||
@Override
|
||||
public List<VascSelectItem> getVascSelectItems(VascEntry currentEntry) throws VascException {
|
||||
List<VascSelectItem> result = new ArrayList<VascSelectItem>(100);
|
||||
VascEntryLocal entry = (VascEntryLocal)currentEntry.getVascFrontendController().getVascController().getVascEntryController().getVascEntryById(entryId);
|
||||
|
||||
if (keyFieldId==null) {
|
||||
keyFieldId = entry.getPrimaryKeyFieldId();
|
||||
}
|
||||
VascEntryFieldLocal key = (VascEntryFieldLocal)entry.getVascEntryFieldById(keyFieldId);
|
||||
|
||||
if (displayFieldId==null) {
|
||||
displayFieldId = entry.getDisplayNameFieldId();
|
||||
}
|
||||
VascEntryFieldLocal dis = (VascEntryFieldLocal)entry.getVascEntryFieldById(displayFieldId);
|
||||
if (key==null) {
|
||||
throw new VascException("Could not find: "+keyFieldId+" from: "+entry.getId());
|
||||
}
|
||||
if (dis==null) {
|
||||
throw new VascException("Could not find: "+displayFieldId+" from: "+entry.getId());
|
||||
}
|
||||
|
||||
// set frontend data for new clone, we need te get better lifecycle management for stats/entry/etc
|
||||
entry.setVascFrontendController(currentEntry.getVascFrontendController());
|
||||
VascBackend<Serializable> back = currentEntry.getVascFrontendController().getVascController().getVascEntryConfigController().configVascBackendProxied(currentEntry.getVascFrontendController().getVascController(), entry);
|
||||
try {
|
||||
if (nullLabel!=null) {
|
||||
if (nullKeyValue==null) {
|
||||
nullKeyValue = "null";
|
||||
}
|
||||
nullLabel = currentEntry.getVascFrontendController().getVascEntryResourceResolver().getTextValue(nullLabel);
|
||||
if (nullObjectValue==null) {
|
||||
result.add(new VascSelectItem(nullLabel,null,nullKeyValue));
|
||||
} else {
|
||||
result.add(new VascSelectItem(nullLabel,nullObjectValue,nullKeyValue));
|
||||
}
|
||||
}
|
||||
|
||||
// set def para
|
||||
VascBackendState state = new DefaultVascBackendState();
|
||||
|
||||
for (String key2:entry.getEntryParameterKeys()) {
|
||||
Object value = entry.getEntryParameter(key2);
|
||||
//System.out.println("Copy paras name: "+key2+" value: "+value+" class: "+value.getClass().getName());
|
||||
state.setDataParameter(key2, value);
|
||||
}
|
||||
|
||||
// set list para
|
||||
for (VascEntryField vef:entry.getVascEntryListOptions()) {
|
||||
Object def = vef.getDefaultValue();
|
||||
if (def==null) {
|
||||
continue;
|
||||
}
|
||||
String backendName = vef.getBackendName();
|
||||
state.setDataParameter(backendName, def);
|
||||
}
|
||||
|
||||
// set para from parent state entry
|
||||
for (String paraName:entryParameterFieldIds.keySet()) {
|
||||
|
||||
VascEntry fieldEntry = currentEntry;
|
||||
if (useParentFields!=null && useParentFields==true) {
|
||||
if (currentEntry.getVascFrontendController().getVascEntryState().getParent()==null) {
|
||||
throw new IllegalStateException("Requested to use parent state field values but no parent state found.");
|
||||
}
|
||||
fieldEntry = currentEntry.getVascFrontendController().getVascEntryState().getParent().getVascEntry();
|
||||
}
|
||||
|
||||
String paraValueId = entryParameterFieldIds.get(paraName);
|
||||
VascEntryFieldLocal fieldOrg = (VascEntryFieldLocal)fieldEntry.getVascEntryFieldById(paraValueId);
|
||||
if (fieldOrg==null) {
|
||||
//System.out.println("could not find field: "+paraValueId);
|
||||
continue;
|
||||
}
|
||||
VascEntryField field = fieldOrg.clone();
|
||||
field.getVascValidators().clear();
|
||||
VascEntryFieldValue<Serializable> v = fieldEntry.getVascFrontendController().getVascEntryState().getVascBackend().provideVascEntryFieldValue();
|
||||
|
||||
Serializable record = fieldEntry.getVascFrontendController().getVascEntryState().getEntryDataObject();
|
||||
if (record==null) {
|
||||
//System.out.println("could not get selected records from state.");
|
||||
continue;
|
||||
}
|
||||
Object value = v.getValue(fieldOrg.getBackendName(), record);
|
||||
|
||||
//System.out.println("Set entry paras name: "+paraName+" value: "+value+" class: "+value.getClass().getName());
|
||||
state.setDataParameter(paraName, value);
|
||||
}
|
||||
|
||||
|
||||
// TODO: FIX >>>>>>>>>>>>>>>>>>
|
||||
if (key.getVascEntryFieldValue()==null) {
|
||||
// TODO: fix this for better remote support
|
||||
VascEntryField fieldClone = key.clone();
|
||||
fieldClone.getVascValidators().clear();
|
||||
|
||||
VascEntryFieldValue<Serializable> v = currentEntry.getVascFrontendController().getVascEntryState().getVascBackend().provideVascEntryFieldValue();
|
||||
key.setVascEntryFieldValue(v);
|
||||
}
|
||||
if (dis.getVascEntryFieldValue()==null) {
|
||||
// TODO: fix this for better remote support
|
||||
VascEntryField fieldClone = dis.clone();
|
||||
fieldClone.getVascValidators().clear();
|
||||
|
||||
VascEntryFieldValue<Serializable> v = currentEntry.getVascFrontendController().getVascEntryState().getVascBackend().provideVascEntryFieldValue();
|
||||
dis.setVascEntryFieldValue(v);
|
||||
}
|
||||
|
||||
|
||||
// execute
|
||||
for (Serializable o:back.execute(state).getPageData()) {
|
||||
Serializable keyId = key.getVascEntryFieldValue().getValue(key.getBackendName(), o);
|
||||
String nameId = dis.getVascEntryFieldValue().getDisplayValue(dis.getBackendName(), o);
|
||||
if (returnKeyValue!=null && false==returnKeyValue) {
|
||||
VascSelectItem item = new VascSelectItem(nameId,o,""+keyId);
|
||||
result.add(item);
|
||||
} else {
|
||||
VascSelectItem item = new VascSelectItem(nameId,keyId,""+keyId); // per default return keyID object.
|
||||
result.add(item);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new VascException(e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the entryId
|
||||
*/
|
||||
public String getEntryId() {
|
||||
return entryId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param entryId the entryId to set
|
||||
*/
|
||||
public void setEntryId(String entryId) {
|
||||
this.entryId = entryId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the keyFieldId
|
||||
*/
|
||||
public String getKeyFieldId() {
|
||||
return keyFieldId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param keyFieldId the keyFieldId to set
|
||||
*/
|
||||
public void setKeyFieldId(String keyFieldId) {
|
||||
this.keyFieldId = keyFieldId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the displayFieldId
|
||||
*/
|
||||
public String getDisplayFieldId() {
|
||||
return displayFieldId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param displayFieldId the displayFieldId to set
|
||||
*/
|
||||
public void setDisplayFieldId(String displayFieldId) {
|
||||
this.displayFieldId = displayFieldId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the nullLabel
|
||||
*/
|
||||
@Override
|
||||
public String getNullLabel() {
|
||||
return nullLabel;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nullLabel the nullLabel to set
|
||||
*/
|
||||
@Override
|
||||
public void setNullLabel(String nullLabel) {
|
||||
this.nullLabel = nullLabel;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the nullKeyValue
|
||||
*/
|
||||
@Override
|
||||
public String getNullKeyValue() {
|
||||
return nullKeyValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nullKeyValue the nullKeyValue to set
|
||||
*/
|
||||
@Override
|
||||
public void setNullKeyValue(String nullKeyValue) {
|
||||
this.nullKeyValue = nullKeyValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the returnKeyValue
|
||||
*/
|
||||
public Boolean getReturnKeyValue() {
|
||||
return returnKeyValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param returnKeyValue the returnKeyValue to set
|
||||
*/
|
||||
public void setReturnKeyValue(Boolean returnKeyValue) {
|
||||
this.returnKeyValue = returnKeyValue;
|
||||
}
|
||||
|
||||
public String getEntryParameterFieldId(String parameterName) {
|
||||
return entryParameterFieldIds.get(parameterName);
|
||||
}
|
||||
public void addEntryParameterFieldId(String parameterName,String valueFieldId) {
|
||||
entryParameterFieldIds.put(parameterName, valueFieldId);
|
||||
}
|
||||
public List<String> getEntryParameterFieldIdKeys() {
|
||||
return new ArrayList<String>(entryParameterFieldIds.keySet());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the useParentFields
|
||||
*/
|
||||
public Boolean getUseParentFields() {
|
||||
return useParentFields;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param useParentFields the useParentFields to set
|
||||
*/
|
||||
public void setUseParentFields(Boolean useParentFields) {
|
||||
this.useParentFields = useParentFields;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the nullObjectValue
|
||||
*/
|
||||
public String getNullObjectValue() {
|
||||
return nullObjectValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nullObjectValue the nullObjectValue to set
|
||||
*/
|
||||
public void setNullObjectValue(String nullObjectValue) {
|
||||
this.nullObjectValue = nullObjectValue;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,181 +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.impl.ui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.forwardfire.vasc.core.VascEntry;
|
||||
import net.forwardfire.vasc.core.ui.VascSelectItem;
|
||||
import net.forwardfire.vasc.core.ui.VascSelectItemModel;
|
||||
import net.forwardfire.vasc.core.VascException;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The DefaultVascSelectItemModel
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Oct 27, 2007
|
||||
*/
|
||||
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;
|
||||
private Boolean useParentFields = null;
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.core.ui.VascSelectItemModel#getVascSelectItems(net.forwardfire.vasc.core.VascEntry)
|
||||
*/
|
||||
@Override
|
||||
public List<VascSelectItem> getVascSelectItems(VascEntry currentEntry) throws VascException {
|
||||
List<VascSelectItem> result = new ArrayList<VascSelectItem>(100);
|
||||
|
||||
if (nullLabel!=null) {
|
||||
if (nullKeyValue==null) {
|
||||
nullKeyValue = "null";
|
||||
}
|
||||
nullLabel = currentEntry.getVascFrontendController().getVascEntryResourceResolver().getTextValue(nullLabel);
|
||||
VascSelectItem item = new VascSelectItem(nullLabel,null,nullKeyValue);
|
||||
result.add(item);
|
||||
}
|
||||
|
||||
if (enumClass!=null) {
|
||||
for (Object o:enumClass.getEnumConstants()) {
|
||||
String value = o.toString();
|
||||
result.add(new VascSelectItem(value,value,value));
|
||||
}
|
||||
}
|
||||
if (data==null) {
|
||||
return result;
|
||||
}
|
||||
if (data instanceof String) {
|
||||
String[] values = ((String)data).split(",");
|
||||
for (String value:values) {
|
||||
result.add(new VascSelectItem(value,value,value));
|
||||
}
|
||||
} else if (data instanceof List) {
|
||||
List<?> values = (List<?>)data;
|
||||
for (Object o:values) {
|
||||
String value = ""+o;
|
||||
result.add(new VascSelectItem(value,value,value));
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return the data
|
||||
*/
|
||||
public Object getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param data the data to set
|
||||
*/
|
||||
public void setData(Object data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the nullLabel
|
||||
*/
|
||||
@Override
|
||||
public String getNullLabel() {
|
||||
return nullLabel;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nullLabel the nullLabel to set
|
||||
*/
|
||||
@Override
|
||||
public void setNullLabel(String nullLabel) {
|
||||
this.nullLabel = nullLabel;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the nullKeyValue
|
||||
*/
|
||||
@Override
|
||||
public String getNullKeyValue() {
|
||||
return nullKeyValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nullKeyValue the nullKeyValue to set
|
||||
*/
|
||||
@Override
|
||||
public void setNullKeyValue(String nullKeyValue) {
|
||||
this.nullKeyValue = nullKeyValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the returnKeyValue
|
||||
*/
|
||||
public Boolean getReturnKeyValue() {
|
||||
return returnKeyValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param returnKeyValue the returnKeyValue to set
|
||||
*/
|
||||
public void setReturnKeyValue(Boolean returnKeyValue) {
|
||||
this.returnKeyValue = returnKeyValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the useParentFields
|
||||
*/
|
||||
public Boolean getUseParentFields() {
|
||||
return useParentFields;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param useParentFields the useParentFields to set
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -25,9 +25,9 @@ package net.forwardfire.vasc.impl.x4o;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackend;
|
||||
import net.forwardfire.vasc.backend.VascBackendController;
|
||||
import net.forwardfire.vasc.backend.VascBackendControllerLocal;
|
||||
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
|
||||
import net.forwardfire.vasc.core.VascController;
|
||||
|
||||
import org.x4o.xml.element.AbstractElementConfigurator;
|
||||
|
|
@ -50,7 +50,7 @@ public class VascBackendElementConfigurator extends AbstractElementConfigurator
|
|||
public void doConfigElement(Element element) throws ElementConfiguratorException {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
VascBackend<Serializable> backend = (VascBackend<Serializable>)element.getElementObject();
|
||||
VascBackendCrud<Serializable> backend = (VascBackendCrud<Serializable>)element.getElementObject();
|
||||
|
||||
VascController vascController = VascDriver.getVascController(element.getLanguageSession());
|
||||
VascBackendController backendController = vascController.getVascBackendController();
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@
|
|||
|
||||
package net.forwardfire.vasc.impl.x4o;
|
||||
|
||||
import net.forwardfire.vasc.backend.object.VascSelectItemModelEntry;
|
||||
import net.forwardfire.vasc.core.VascEntryLinkLocal;
|
||||
import net.forwardfire.vasc.impl.ui.VascSelectItemModelEntry;
|
||||
|
||||
import org.x4o.xml.element.AbstractElement;
|
||||
import org.x4o.xml.element.ElementException;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue