IDEMPIERE-4842 Easier model registration (#877)

* Preliminary support for automatic model class registration

Model classes can be tagged with a new @Model annotation that allows for
easy/fast class scanning/registration, based on the ClassIndex library.
The list of annotated model classes is generated at compile time, thus
reducing reflection reliance to a bare minimum.

NOTE: Eclipse uses its own Java compiler which is not strictly standard
compliant and requires extra configuration. In Java Compiler ->
Annotation Processing -> Factory Path you need to add ClassIndex jar
file

* Annotation based model factory

* Improve classloader determination for annotation scanning

ClassIndex default annotation scanning method determines the classloader
to be used by calling Thread.currentThread().getContextClassLoader(),
which should not be used in an OSGi environment.

* Enable ClassIndex's annotation processor under Eclipse

Make sure annotation processing is enabled at Module Properties -> Java
Compiler -> Annotation Processing

* Refactoring annotation-based model class detection

Eliminated the need of annotating M* classes, by using ClassIndex's
@IndexSubclasses annotation.

* Minor change

* Minor changes

* Creation of AbstractModelFactory

* Documentation

* Make AnnotationBasedModelFactory extend AbstractModelFactory

* IDEMPIERE-4842 Easier model registration

- add annotation processor jdt settings
- fix @Component annotation for AnnotationBasedModelFactory
- fix generated x_* class missing "org.atteo.classindex.IndexSubclasses"
import

* Expose ClassIndex lib to other bundles

* Updated model classes

Co-authored-by: hengsin <hengsin@gmail.com>
This commit is contained in:
Saulo José Gil 2021-09-18 02:35:57 -03:00 committed by GitHub
parent a1da95cfff
commit 602e450a93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1499 changed files with 19170 additions and 13887 deletions

View File

@ -120,7 +120,7 @@ public class CalloutOrder extends CalloutEngine
if (DocSubTypeSO.equals(MOrder.DocSubTypeSO_POS))
mTab.setValue ("DeliveryRule", X_C_Order.DELIVERYRULE_Force);
else if (DocSubTypeSO.equals(MOrder.DocSubTypeSO_Prepay))
mTab.setValue ("DeliveryRule", X_C_Order.DELIVERYRULE_AfterReceipt);
mTab.setValue ("DeliveryRule", X_C_Order.DELIVERYRULE_AfterPayment);
else
mTab.setValue ("DeliveryRule", X_C_Order.DELIVERYRULE_Availability);
@ -396,7 +396,7 @@ public class CalloutOrder extends CalloutEngine
if (OrderType.equals(MOrder.DocSubTypeSO_Prepay))
{
mTab.setValue("InvoiceRule", X_C_Order.INVOICERULE_Immediate);
mTab.setValue("DeliveryRule", X_C_Order.DELIVERYRULE_AfterReceipt);
mTab.setValue("DeliveryRule", X_C_Order.DELIVERYRULE_AfterPayment);
}
else if (OrderType.equals(MOrder.DocSubTypeSO_POS)) // for POS
mTab.setValue("PaymentRule", X_C_Order.PAYMENTRULE_Cash);

View File

@ -220,7 +220,7 @@ public class InOutGenerate extends SvrProcess
MOrder order = new MOrder (getCtx(), rs, get_TrxName());
statusUpdate(Msg.getMsg(getCtx(), "Processing") + " " + order.getDocumentInfo());
if (MOrder.DELIVERYRULE_AfterReceipt.equals(order.getDeliveryRule()))
if (MOrder.DELIVERYRULE_AfterPayment.equals(order.getDeliveryRule()))
{
BigDecimal payment = order.getPaymentAmt();
if (payment == null || payment.compareTo(order.getGrandTotal()) < 0)
@ -344,7 +344,7 @@ public class InOutGenerate extends SvrProcess
createLine (order, line, toDeliver, storages, false);
}
// Availability
else if ((MOrder.DELIVERYRULE_Availability.equals(order.getDeliveryRule()) || MOrder.DELIVERYRULE_AfterReceipt.equals(order.getDeliveryRule()))
else if ((MOrder.DELIVERYRULE_Availability.equals(order.getDeliveryRule()) || MOrder.DELIVERYRULE_AfterPayment.equals(order.getDeliveryRule()))
&& (onHand.signum() > 0
|| toDeliver.signum() < 0))
{

View File

@ -0,0 +1,4 @@
<factorypath>
<factorypathentry kind="WKSPJAR" id="/org.adempiere.base/lib/classindex.jar" enabled="true" runInBatchMode="true"/>
<factorypathentry kind="PLUGIN" id="org.eclipse.jst.ws.annotations.core" enabled="true" runInBatchMode="false"/>
</factorypath>

View File

@ -0,0 +1,5 @@
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=true
org.eclipse.jdt.apt.genSrcDir=.apt_generated
org.eclipse.jdt.apt.genTestSrcDir=.apt_generated_tests
org.eclipse.jdt.apt.reconcileEnabled=true

View File

@ -7,7 +7,8 @@ Bundle-ClassPath: .,
lib/bsh.jar,
lib/commons-validator.jar,
lib/cron4j.jar,
lib/avalon-framework-api.jar
lib/avalon-framework-api.jar,
lib/classindex.jar
Export-Package: bsh,
bsh.classpath,
bsh.collection,
@ -37,6 +38,7 @@ Export-Package: bsh,
org.adempiere.print.export,
org.adempiere.process,
org.adempiere.util,
org.atteo.classindex,
org.compiere,
org.compiere.acct,
org.compiere.db,
@ -126,6 +128,7 @@ Import-Package: com.google.zxing,
org.krysalis.barcode4j.impl.upcean;version="2.1.0",
org.krysalis.barcode4j.output.bitmap;version="2.1.0",
org.osgi.framework,
org.osgi.framework.wiring;version="1.2.0",
org.osgi.service.cm;version="1.3.0",
org.osgi.service.component;version="1.1.0",
org.osgi.service.component.annotations;version="1.3.0",

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" immediate="true" name="org.adempiere.base.AnnotationBasedModelFactory">
<property name="service.ranking" type="Integer" value="1"/>
<service>
<provide interface="org.adempiere.base.IModelFactory"/>
</service>
<implementation class="org.adempiere.base.AnnotationBasedModelFactory"/>
</scr:component>

View File

@ -6,7 +6,8 @@ bin.includes = plugin.xml,\
lib/avalon-framework-api.jar,\
lib/bsh.jar,\
lib/commons-validator.jar,\
lib/cron4j.jar
lib/cron4j.jar,\
lib/classindex.jar
src.includes = schema/
source.. = src/
output.. = target/classes/

View File

@ -43,6 +43,11 @@
<artifactId>avalon-framework-api</artifactId>
<version>4.3.1</version>
</artifactItem>
<artifactItem>
<groupId>org.atteo.classindex</groupId>
<artifactId>classindex</artifactId>
<version>3.4</version>
</artifactItem>
</artifactItems>
<outputDirectory>lib</outputDirectory>
<stripVersion>true</stripVersion>

View File

@ -0,0 +1,124 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
* or via info@compiere.org or http://www.compiere.org/license.html *
* Contributor(s): Carlos Ruiz - globalqss *
*****************************************************************************/
package org.adempiere.base;
import java.lang.reflect.Constructor;
import java.sql.ResultSet;
import java.util.Properties;
import java.util.logging.Level;
import org.compiere.model.MTable;
import org.compiere.model.PO;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
/**
* Provides basic functionality for {@link PO} resolution and instantiation.
* Based on legacy code in {@link MTable}.
* @author Jorg Janke
* @author hengsin
*/
public abstract class AbstractModelFactory implements IModelFactory {
private final static CLogger s_log = CLogger.getCLogger(AbstractModelFactory.class);
/**
* {@inheritDoc}
*/
@Override
public PO getPO(String tableName, int Record_ID, String trxName) {
Class<?> clazz = getClass(tableName);
if (clazz == null)
{
return null;
}
boolean errorLogged = false;
try
{
Constructor<?> constructor = null;
try
{
constructor = clazz.getDeclaredConstructor(new Class[]{Properties.class, int.class, String.class});
}
catch (Exception e)
{
String msg = e.getMessage();
if (msg == null)
msg = e.toString();
s_log.warning("No transaction Constructor for " + clazz + " (" + msg + ")");
}
PO po = constructor!=null ? (PO)constructor.newInstance(new Object[] {Env.getCtx(), Integer.valueOf(Record_ID), trxName}) : null;
return po;
}
catch (Exception e)
{
if (e.getCause() != null)
{
Throwable t = e.getCause();
s_log.log(Level.SEVERE, "(id) - Table=" + tableName + ",Class=" + clazz, t);
errorLogged = true;
if (t instanceof Exception)
s_log.saveError("Error", (Exception)e.getCause());
else
s_log.saveError("Error", "Table=" + tableName + ",Class=" + clazz);
}
else
{
s_log.log(Level.SEVERE, "(id) - Table=" + tableName + ",Class=" + clazz, e);
errorLogged = true;
s_log.saveError("Error", "Table=" + tableName + ",Class=" + clazz);
}
}
if (!errorLogged)
s_log.log(Level.SEVERE, "(id) - Not found - Table=" + tableName
+ ", Record_ID=" + Record_ID);
return null;
}
/**
* {@inheritDoc}
*/
@Override
public PO getPO(String tableName, ResultSet rs, String trxName) {
Class<?> clazz = getClass(tableName);
if (clazz == null)
{
return null;
}
boolean errorLogged = false;
try
{
Constructor<?> constructor = clazz.getDeclaredConstructor(new Class[]{Properties.class, ResultSet.class, String.class});
PO po = (PO)constructor.newInstance(new Object[] {Env.getCtx(), rs, trxName});
return po;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, "(rs) - Table=" + tableName + ",Class=" + clazz, e);
errorLogged = true;
s_log.saveError("Error", "Table=" + tableName + ",Class=" + clazz);
}
if (!errorLogged)
s_log.log(Level.SEVERE, "(rs) - Not found - Table=" + tableName);
return null;
}
}

View File

@ -0,0 +1,81 @@
/******************************************************************************
* Product: iDempiere ERP & CRM Smart Business Solution *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.adempiere.base;
import org.atteo.classindex.ClassIndex;
import org.compiere.util.CCache;
import org.osgi.framework.Bundle;
import org.osgi.framework.wiring.BundleWiring;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
/**
* Translates table names into model classes having the {@link Model} annotation. Relies on
* {@link DefaultModelFactory} for everything else.
* This factory is designed to have a service rank higher than {@link DefaultModelFactory}, as class
* discovery using SPI is preferred over reflection-based methods.
* @author Saulo Gil
*/
@Component(immediate = true, service = IModelFactory.class, property = {"service.ranking:Integer=1"})
public class AnnotationBasedModelFactory extends AbstractModelFactory implements IModelFactory
{
private Bundle usingBundle;
private CCache<String,Class<?>> classCache = new CCache<String,Class<?>>(null, "ABMF", 100, 120, false, 2000);
@Activate
void activate(ComponentContext context)
{
this.usingBundle = context.getUsingBundle();
}
@Override
public Class<?> getClass(String tableName)
{
// search first into cache
Class<?> candidate = classCache.get(tableName);
if (candidate != null)
{
// Object.class indicate no generated PO class for tableName
if (candidate.equals(Object.class))
return null;
else
return candidate;
}
// scan model annotations
BundleWiring wiring = usingBundle.adapt(BundleWiring.class);
for(Class<?> xClass : ClassIndex.getAnnotated(Model.class, wiring.getClassLoader()))
{
Model annotation = xClass.getAnnotation(Model.class);
if(annotation.table().equalsIgnoreCase(tableName))
{
candidate = xClass;
for(Class<?> mClass : ClassIndex.getSubclasses(xClass, wiring.getClassLoader())) {
if(!mClass.equals(candidate) && candidate.isAssignableFrom(mClass))
// favoring candidates higher in the class hierarchy
candidate = mClass;
}
break;
}
}
//Object.class to indicate no PO class for tableName
classCache.put(tableName, candidate == null ? Object.class : candidate);
return candidate;
}
}

View File

@ -17,9 +17,6 @@
*****************************************************************************/
package org.adempiere.base;
import java.lang.reflect.Constructor;
import java.sql.ResultSet;
import java.util.Properties;
import java.util.logging.Level;
import org.compiere.model.MEntityType;
@ -31,13 +28,15 @@ import org.compiere.util.Env;
import org.compiere.util.Util;
/**
* Default model factory implementation base on legacy code in MTable.
* Default model factory implementation base on legacy code in {@link MTable}.
* @author Jorg Janke
* @author hengsin
* @deprecated
*/
public class DefaultModelFactory implements IModelFactory {
public class DefaultModelFactory extends AbstractModelFactory {
private CCache<String,Class<?>> s_classCache = new CCache<String,Class<?>>(null, "PO_Class", 100, 120, false, 2000);
private static CCache<String,Class<?>> s_classCache = new CCache<String,Class<?>>(null, "PO_Class", 100, 120, false, 2000);
private final static CLogger s_log = CLogger.getCLogger(DefaultModelFactory.class);
/** Packages for Model Classes */
@ -245,82 +244,4 @@ public class DefaultModelFactory implements IModelFactory {
return null;
} // getPOclass
@Override
public PO getPO(String tableName, int Record_ID, String trxName) {
Class<?> clazz = getClass(tableName);
if (clazz == null)
{
return null;
}
boolean errorLogged = false;
try
{
Constructor<?> constructor = null;
try
{
constructor = clazz.getDeclaredConstructor(new Class[]{Properties.class, int.class, String.class});
}
catch (Exception e)
{
String msg = e.getMessage();
if (msg == null)
msg = e.toString();
s_log.warning("No transaction Constructor for " + clazz + " (" + msg + ")");
}
PO po = constructor!=null ? (PO)constructor.newInstance(new Object[] {Env.getCtx(), Integer.valueOf(Record_ID), trxName}) : null;
return po;
}
catch (Exception e)
{
if (e.getCause() != null)
{
Throwable t = e.getCause();
s_log.log(Level.SEVERE, "(id) - Table=" + tableName + ",Class=" + clazz, t);
errorLogged = true;
if (t instanceof Exception)
s_log.saveError("Error", (Exception)e.getCause());
else
s_log.saveError("Error", "Table=" + tableName + ",Class=" + clazz);
}
else
{
s_log.log(Level.SEVERE, "(id) - Table=" + tableName + ",Class=" + clazz, e);
errorLogged = true;
s_log.saveError("Error", "Table=" + tableName + ",Class=" + clazz);
}
}
if (!errorLogged)
s_log.log(Level.SEVERE, "(id) - Not found - Table=" + tableName
+ ", Record_ID=" + Record_ID);
return null;
}
@Override
public PO getPO(String tableName, ResultSet rs, String trxName) {
Class<?> clazz = getClass(tableName);
if (clazz == null)
{
return null;
}
boolean errorLogged = false;
try
{
Constructor<?> constructor = clazz.getDeclaredConstructor(new Class[]{Properties.class, ResultSet.class, String.class});
PO po = (PO)constructor.newInstance(new Object[] {Env.getCtx(), rs, trxName});
return po;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, "(rs) - Table=" + tableName + ",Class=" + clazz, e);
errorLogged = true;
s_log.saveError("Error", "Table=" + tableName + ",Class=" + clazz);
}
if (!errorLogged)
s_log.log(Level.SEVERE, "(rs) - Not found - Table=" + tableName);
return null;
}
}

View File

@ -0,0 +1,36 @@
/******************************************************************************
* Product: iDempiere ERP & CRM Smart Business Solution *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.adempiere.base;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.atteo.classindex.IndexAnnotated;
/**
* Automatic model class registration
* @author Saulo Gil
*/
@Target(TYPE)
@IndexAnnotated
@Retention(RetentionPolicy.RUNTIME)
public @interface Model {
/**
* Table name
* @return
*/
String table();
}

View File

@ -161,6 +161,7 @@ public class ModelClassGenerator
addImportClass(java.util.Properties.class);
addImportClass(java.sql.ResultSet.class);
addImportClass("org.atteo.classindex.IndexSubclasses");
if (!packageName.equals("org.compiere.model"))
addImportClass("org.compiere.model.*");
createImports(start);
@ -168,6 +169,8 @@ public class ModelClassGenerator
start.append("/** Generated Model for ").append(tableName).append(NL)
.append(" * @author iDempiere (generated) ").append(NL)
.append(" * @version ").append(Adempiere.MAIN_VERSION).append(" - $Id$ */").append(NL)
.append("@IndexSubclasses").append(NL)
.append("@org.adempiere.base.Model(table=\"").append(tableName).append("\")").append(NL)
.append("public class ").append(className)
.append(" extends PO")
.append(" implements I_").append(tableName)

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AccessLog
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AccessLog
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Alert
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Alert
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AlertProcessor
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AlertProcessor
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AlertProcessorLog
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AlertProcessorLog
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AlertRecipient
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AlertRecipient
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AlertRule
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AlertRule
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AllClients_V
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AllClients_V
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AllUsers_V
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AllUsers_V
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Archive
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Archive
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Attachment
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Attachment
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AttachmentNote
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AttachmentNote
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Attribute
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Attribute
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Attribute_Value
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Attribute_Value
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AuthorizationAccount
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AuthorizationAccount
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AuthorizationCredential
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AuthorizationCredential
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AuthorizationProvider
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AuthorizationProvider
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_AuthorizationScopeProv
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_AuthorizationScopeProv
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_BroadcastMessage
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_BroadcastMessage
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_ChangeLog
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_ChangeLog
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Chart
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Chart
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_ChartDatasource
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_ChartDatasource
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Client
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Client
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_ClientInfo
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_ClientInfo
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_ClientShare
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_ClientShare
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Color
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Color
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Column
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Column
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Column_Access
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Column_Access
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_CtxHelp
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_CtxHelp
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_CtxHelpMsg
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_CtxHelpMsg
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_CtxHelpSuggestion
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_CtxHelpSuggestion
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Desktop
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Desktop
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_DesktopWorkbench
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_DesktopWorkbench
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Document_Action_Access
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Document_Action_Access
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Element
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Element
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_EntityType
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_EntityType
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Error
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Error
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Field
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Field
{
@ -79,6 +79,19 @@ public interface I_AD_Field
public org.compiere.model.I_AD_FieldGroup getAD_FieldGroup() throws RuntimeException;
/** Column name AD_Field_ID */
public static final String COLUMNNAME_AD_Field_ID = "AD_Field_ID";
/** Set Field.
* Field on a database table
*/
public void setAD_Field_ID (int AD_Field_ID);
/** Get Field.
* Field on a database table
*/
public int getAD_Field_ID();
/** Column name AD_FieldStyle_ID */
public static final String COLUMNNAME_AD_FieldStyle_ID = "AD_FieldStyle_ID";
@ -94,19 +107,6 @@ public interface I_AD_Field
public org.compiere.model.I_AD_Style getAD_FieldStyle() throws RuntimeException;
/** Column name AD_Field_ID */
public static final String COLUMNNAME_AD_Field_ID = "AD_Field_ID";
/** Set Field.
* Field on a database table
*/
public void setAD_Field_ID (int AD_Field_ID);
/** Get Field.
* Field on a database table
*/
public int getAD_Field_ID();
/** Column name AD_Field_UU */
public static final String COLUMNNAME_AD_Field_UU = "AD_Field_UU";
@ -219,19 +219,6 @@ public interface I_AD_Field
public org.compiere.model.I_AD_Val_Rule getAD_Val_Rule_Lookup() throws RuntimeException;
/** Column name ColumnSQL */
public static final String COLUMNNAME_ColumnSQL = "ColumnSQL";
/** Set Column SQL.
* Virtual Column (r/o)
*/
public void setColumnSQL (String ColumnSQL);
/** Get Column SQL.
* Virtual Column (r/o)
*/
public String getColumnSQL();
/** Column name ColumnSpan */
public static final String COLUMNNAME_ColumnSpan = "ColumnSpan";
@ -245,6 +232,19 @@ public interface I_AD_Field
*/
public int getColumnSpan();
/** Column name ColumnSQL */
public static final String COLUMNNAME_ColumnSQL = "ColumnSQL";
/** Set Column SQL.
* Virtual Column (r/o)
*/
public void setColumnSQL (String ColumnSQL);
/** Get Column SQL.
* Virtual Column (r/o)
*/
public String getColumnSQL();
/** Column name Created */
public static final String COLUMNNAME_Created = "Created";

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_FieldGroup
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_FieldGroup
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_FieldSuggestion
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_FieldSuggestion
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Find
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Find
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Form
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Form
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Form_Access
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Form_Access
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_HouseKeeping
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_HouseKeeping
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Image
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Image
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_ImpFormat
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_ImpFormat
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_ImpFormat_Row
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_ImpFormat_Row
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_ImportTemplate
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_ImportTemplate
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_ImportTemplateAccess
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_ImportTemplateAccess
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_IndexColumn
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_IndexColumn
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_InfoColumn
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_InfoColumn
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_InfoProcess
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_InfoProcess
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_InfoRelated
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_InfoRelated
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_InfoWindow
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_InfoWindow
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_InfoWindow_Access
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_InfoWindow_Access
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Issue
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Issue
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_LabelPrinter
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_LabelPrinter
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_LabelPrinterFunction
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_LabelPrinterFunction
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Language
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Language
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_LdapAccess
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_LdapAccess
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_LdapProcessor
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_LdapProcessor
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_LdapProcessorLog
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_LdapProcessorLog
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Menu
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Menu
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Message
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Message
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_MigrationScript
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_MigrationScript
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_ModelValidator
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_ModelValidator
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Modification
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Modification
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Note
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Note
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Org
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Org
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_OrgInfo
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_OrgInfo
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_OrgType
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_OrgType
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_PInstance
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_PInstance
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_PInstance_Log
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_PInstance_Log
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Package_Exp
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Package_Exp
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Package_Exp_Detail
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Package_Exp_Detail
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Package_Imp
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Package_Imp
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Package_Imp_Backup
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Package_Imp_Backup
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Package_Imp_Detail
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Package_Imp_Detail
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Package_Imp_Inst
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Package_Imp_Inst
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Package_Imp_Proc
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Package_Imp_Proc
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Package_UUID_Map
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Package_UUID_Map
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_PasswordRule
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_PasswordRule
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Password_History
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Password_History
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_PostIt
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_PostIt
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_Preference
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_Preference
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_PrintColor
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_PrintColor
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_PrintFont
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_PrintFont
{

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_PrintForm
* @author iDempiere (generated)
* @version Release 8.2
* @version Development 9.0
*/
public interface I_AD_PrintForm
{

Some files were not shown because too many files have changed in this diff Show More