*[ 1755849 ] Add AD_ModelValidator
This commit is contained in:
parent
bf6f104bfc
commit
07604d4a9b
|
@ -0,0 +1,130 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* This file is part of Adempiere ERP Bazaar *
|
||||||
|
* http://www.adempiere.org *
|
||||||
|
* *
|
||||||
|
* Copyright (C) Trifon Trifonov. *
|
||||||
|
* Copyright (C) Contributors *
|
||||||
|
* *
|
||||||
|
* This program is free software;
|
||||||
|
you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License *
|
||||||
|
* as published by the Free Software Foundation;
|
||||||
|
either version 2 *
|
||||||
|
* of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., 51 Franklin Street, Fifth Floor, Boston, *
|
||||||
|
* MA 02110-1301, USA. *
|
||||||
|
* *
|
||||||
|
* Contributors: *
|
||||||
|
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
|
||||||
|
* *
|
||||||
|
* Sponsors: *
|
||||||
|
* - Company (http://www.site.com) *
|
||||||
|
**********************************************************************/
|
||||||
|
package org.compiere.model;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import org.compiere.util.KeyNamePair;
|
||||||
|
|
||||||
|
/** Generated Interface for AD_ModelValidator
|
||||||
|
* @author Trifon Trifonov (generated)
|
||||||
|
* @version Release 3.3.0
|
||||||
|
*/
|
||||||
|
public interface I_AD_ModelValidator
|
||||||
|
{
|
||||||
|
|
||||||
|
/** TableName=AD_ModelValidator */
|
||||||
|
public static final String Table_Name = "AD_ModelValidator";
|
||||||
|
|
||||||
|
/** AD_Table_ID=53014 */
|
||||||
|
public static final int Table_ID = MTable.getTable_ID(Table_Name);
|
||||||
|
|
||||||
|
KeyNamePair Model = new KeyNamePair(Table_ID, Table_Name);
|
||||||
|
|
||||||
|
/** AccessLevel = 4 - System
|
||||||
|
*/
|
||||||
|
BigDecimal accessLevel = BigDecimal.valueOf(4);
|
||||||
|
|
||||||
|
/** Load Meta Data */
|
||||||
|
|
||||||
|
/** Column name AD_ModelValidator_ID */
|
||||||
|
public static final String COLUMNNAME_AD_ModelValidator_ID = "AD_ModelValidator_ID";
|
||||||
|
|
||||||
|
/** Set Model Validator */
|
||||||
|
public void setAD_ModelValidator_ID (int AD_ModelValidator_ID);
|
||||||
|
|
||||||
|
/** Get Model Validator */
|
||||||
|
public int getAD_ModelValidator_ID();
|
||||||
|
|
||||||
|
/** Column name Description */
|
||||||
|
public static final String COLUMNNAME_Description = "Description";
|
||||||
|
|
||||||
|
/** Set Description.
|
||||||
|
* Optional short description of the record
|
||||||
|
*/
|
||||||
|
public void setDescription (String Description);
|
||||||
|
|
||||||
|
/** Get Description.
|
||||||
|
* Optional short description of the record
|
||||||
|
*/
|
||||||
|
public String getDescription();
|
||||||
|
|
||||||
|
/** Column name EntityType */
|
||||||
|
public static final String COLUMNNAME_EntityType = "EntityType";
|
||||||
|
|
||||||
|
/** Set Entity Type.
|
||||||
|
* Dictionary Entity Type;
|
||||||
|
Determines ownership and synchronization
|
||||||
|
*/
|
||||||
|
public void setEntityType (String EntityType);
|
||||||
|
|
||||||
|
/** Get Entity Type.
|
||||||
|
* Dictionary Entity Type;
|
||||||
|
Determines ownership and synchronization
|
||||||
|
*/
|
||||||
|
public String getEntityType();
|
||||||
|
|
||||||
|
/** Column name Help */
|
||||||
|
public static final String COLUMNNAME_Help = "Help";
|
||||||
|
|
||||||
|
/** Set Comment/Help.
|
||||||
|
* Comment or Hint
|
||||||
|
*/
|
||||||
|
public void setHelp (String Help);
|
||||||
|
|
||||||
|
/** Get Comment/Help.
|
||||||
|
* Comment or Hint
|
||||||
|
*/
|
||||||
|
public String getHelp();
|
||||||
|
|
||||||
|
/** Column name ModelValidationClass */
|
||||||
|
public static final String COLUMNNAME_ModelValidationClass = "ModelValidationClass";
|
||||||
|
|
||||||
|
/** Set Model Validation Class */
|
||||||
|
public void setModelValidationClass (String ModelValidationClass);
|
||||||
|
|
||||||
|
/** Get Model Validation Class */
|
||||||
|
public String getModelValidationClass();
|
||||||
|
|
||||||
|
/** Column name Name */
|
||||||
|
public static final String COLUMNNAME_Name = "Name";
|
||||||
|
|
||||||
|
/** Set Name.
|
||||||
|
* Alphanumeric identifier of the entity
|
||||||
|
*/
|
||||||
|
public void setName (String Name);
|
||||||
|
|
||||||
|
/** Get Name.
|
||||||
|
* Alphanumeric identifier of the entity
|
||||||
|
*/
|
||||||
|
public String getName();
|
||||||
|
}
|
|
@ -19,6 +19,8 @@ package org.compiere.model;
|
||||||
import java.beans.*;
|
import java.beans.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.logging.*;
|
import java.util.logging.*;
|
||||||
|
|
||||||
|
import org.compiere.acct.Fact;
|
||||||
import org.compiere.util.*;
|
import org.compiere.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,6 +36,7 @@ import org.compiere.util.*;
|
||||||
*/
|
*/
|
||||||
public class ModelValidationEngine
|
public class ModelValidationEngine
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Singleton
|
* Get Singleton
|
||||||
* @return engine
|
* @return engine
|
||||||
|
@ -56,39 +59,75 @@ public class ModelValidationEngine
|
||||||
private ModelValidationEngine ()
|
private ModelValidationEngine ()
|
||||||
{
|
{
|
||||||
super ();
|
super ();
|
||||||
// Go through all Clients and start Validators
|
// Load global validators
|
||||||
|
|
||||||
|
MTable table = MTable.get(new Properties(), X_AD_ModelValidator.Table_ID);
|
||||||
|
Query query = table.createQuery("IsActive='Y'", null);
|
||||||
|
try {
|
||||||
|
List<PO> entityTypes = query.list();
|
||||||
|
for (PO po : entityTypes)
|
||||||
|
{
|
||||||
|
X_AD_ModelValidator entityType = (X_AD_ModelValidator)po;
|
||||||
|
String className = entityType.getModelValidationClass();
|
||||||
|
if (className == null || className.length() == 0)
|
||||||
|
continue;
|
||||||
|
loadValidatorClass(null, className);
|
||||||
|
}
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
log.warning(e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Go through all Clients and start Validators
|
||||||
MClient[] clients = MClient.getAll(new Properties());
|
MClient[] clients = MClient.getAll(new Properties());
|
||||||
for (int i = 0; i < clients.length; i++)
|
for (int i = 0; i < clients.length; i++)
|
||||||
{
|
{
|
||||||
String classNames = clients[i].getModelValidationClasses();
|
String classNames = clients[i].getModelValidationClasses();
|
||||||
if (classNames == null || classNames.length() == 0)
|
if (classNames == null || classNames.length() == 0)
|
||||||
continue;
|
continue;
|
||||||
StringTokenizer st = new StringTokenizer(classNames, ";");
|
loadValidatorClasses(clients[i], classNames);
|
||||||
while (st.hasMoreTokens())
|
|
||||||
{
|
|
||||||
String className = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
className = st.nextToken();
|
|
||||||
if (className == null)
|
|
||||||
continue;
|
|
||||||
className = className.trim();
|
|
||||||
if (className.length() == 0)
|
|
||||||
continue;
|
|
||||||
//
|
|
||||||
Class clazz = Class.forName(className);
|
|
||||||
ModelValidator validator = (ModelValidator)clazz.newInstance();
|
|
||||||
initialize(validator, clients[i]);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, className + ": " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
log.config(toString());
|
log.config(toString());
|
||||||
} // ModelValidatorEngine
|
} // ModelValidatorEngine
|
||||||
|
|
||||||
|
private void loadValidatorClasses(MClient client, String classNames)
|
||||||
|
{
|
||||||
|
StringTokenizer st = new StringTokenizer(classNames, ";");
|
||||||
|
while (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
String className = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
className = st.nextToken();
|
||||||
|
if (className == null)
|
||||||
|
continue;
|
||||||
|
className = className.trim();
|
||||||
|
if (className.length() == 0)
|
||||||
|
continue;
|
||||||
|
//
|
||||||
|
loadValidatorClass(client, className);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, className + ": " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadValidatorClass(MClient client, String className) {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Class clazz = Class.forName(className);
|
||||||
|
ModelValidator validator = (ModelValidator)clazz.newInstance();
|
||||||
|
initialize(validator, client);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, className + ": " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Logger */
|
/** Logger */
|
||||||
private static CLogger log = CLogger.getCLogger(ModelValidationEngine.class);
|
private static CLogger log = CLogger.getCLogger(ModelValidationEngine.class);
|
||||||
/** Change Support */
|
/** Change Support */
|
||||||
|
@ -100,6 +139,10 @@ public class ModelValidationEngine
|
||||||
private Hashtable<String,ArrayList<ModelValidator>> m_modelChangeListeners = new Hashtable<String,ArrayList<ModelValidator>>();
|
private Hashtable<String,ArrayList<ModelValidator>> m_modelChangeListeners = new Hashtable<String,ArrayList<ModelValidator>>();
|
||||||
/** Document Validation Listeners */
|
/** Document Validation Listeners */
|
||||||
private Hashtable<String,ArrayList<ModelValidator>> m_docValidateListeners = new Hashtable<String,ArrayList<ModelValidator>>();
|
private Hashtable<String,ArrayList<ModelValidator>> m_docValidateListeners = new Hashtable<String,ArrayList<ModelValidator>>();
|
||||||
|
/** Accounting Facts Validation Listeners */
|
||||||
|
private Hashtable<String,ArrayList<FactsValidator>>m_factsValidateListeners = new Hashtable<String,ArrayList<FactsValidator>>();
|
||||||
|
|
||||||
|
private ArrayList<ModelValidator> m_globalValidators = new ArrayList<ModelValidator>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize and add validator
|
* Initialize and add validator
|
||||||
|
@ -110,6 +153,8 @@ public class ModelValidationEngine
|
||||||
{
|
{
|
||||||
validator.initialize(this, client);
|
validator.initialize(this, client);
|
||||||
m_validators.add(validator);
|
m_validators.add(validator);
|
||||||
|
if (client == null)
|
||||||
|
m_globalValidators.add(validator);
|
||||||
} // initialize
|
} // initialize
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -125,7 +170,8 @@ public class ModelValidationEngine
|
||||||
for (int i = 0; i < m_validators.size(); i++)
|
for (int i = 0; i < m_validators.size(); i++)
|
||||||
{
|
{
|
||||||
ModelValidator validator = (ModelValidator)m_validators.get(i);
|
ModelValidator validator = (ModelValidator)m_validators.get(i);
|
||||||
if (AD_Client_ID == validator.getAD_Client_ID())
|
if (AD_Client_ID == validator.getAD_Client_ID()
|
||||||
|
|| m_globalValidators.contains(validator))
|
||||||
{
|
{
|
||||||
String error = validator.login(AD_Org_ID, AD_Role_ID, AD_User_ID);
|
String error = validator.login(AD_Org_ID, AD_Role_ID, AD_User_ID);
|
||||||
if (error != null && error.length() > 0)
|
if (error != null && error.length() > 0)
|
||||||
|
@ -146,7 +192,10 @@ public class ModelValidationEngine
|
||||||
if (tableName == null || listener == null)
|
if (tableName == null || listener == null)
|
||||||
return;
|
return;
|
||||||
//
|
//
|
||||||
String propertyName = tableName + listener.getAD_Client_ID();
|
String propertyName =
|
||||||
|
m_globalValidators.contains(listener)
|
||||||
|
? tableName + "*"
|
||||||
|
: tableName + listener.getAD_Client_ID();
|
||||||
ArrayList<ModelValidator> list = (ArrayList<ModelValidator>)m_modelChangeListeners.get(propertyName);
|
ArrayList<ModelValidator> list = (ArrayList<ModelValidator>)m_modelChangeListeners.get(propertyName);
|
||||||
if (list == null)
|
if (list == null)
|
||||||
{
|
{
|
||||||
|
@ -167,7 +216,10 @@ public class ModelValidationEngine
|
||||||
{
|
{
|
||||||
if (tableName == null || listener == null)
|
if (tableName == null || listener == null)
|
||||||
return;
|
return;
|
||||||
String propertyName = tableName + listener.getAD_Client_ID();
|
String propertyName =
|
||||||
|
m_globalValidators.contains(listener)
|
||||||
|
? tableName + "*"
|
||||||
|
: tableName + listener.getAD_Client_ID();
|
||||||
ArrayList list = (ArrayList)m_modelChangeListeners.get(propertyName);
|
ArrayList list = (ArrayList)m_modelChangeListeners.get(propertyName);
|
||||||
if (list == null)
|
if (list == null)
|
||||||
return;
|
return;
|
||||||
|
@ -187,24 +239,44 @@ public class ModelValidationEngine
|
||||||
{
|
{
|
||||||
if (po == null || m_modelChangeListeners.size() == 0)
|
if (po == null || m_modelChangeListeners.size() == 0)
|
||||||
return null;
|
return null;
|
||||||
//
|
|
||||||
String propertyName = po.get_TableName() + po.getAD_Client_ID();
|
|
||||||
ArrayList list = (ArrayList)m_modelChangeListeners.get(propertyName);
|
|
||||||
if (list == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
//
|
String propertyName = po.get_TableName() + "*";
|
||||||
|
ArrayList<ModelValidator> list = m_modelChangeListeners.get(propertyName);
|
||||||
|
if (list != null)
|
||||||
|
{
|
||||||
|
//ad_entitytype.modelvalidationclasses
|
||||||
|
String error = fireModelChange(po, changeType, list);
|
||||||
|
if (error != null && error.length() > 0)
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
propertyName = po.get_TableName() + po.getAD_Client_ID();
|
||||||
|
list = m_modelChangeListeners.get(propertyName);
|
||||||
|
if (list != null)
|
||||||
|
{
|
||||||
|
//ad_client.modelvalidationclasses
|
||||||
|
String error = fireModelChange(po, changeType, list);
|
||||||
|
if (error != null && error.length() > 0)
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
} // fireModelChange
|
||||||
|
|
||||||
|
private String fireModelChange(PO po, int changeType, ArrayList<ModelValidator> list)
|
||||||
|
{
|
||||||
for (int i = 0; i < list.size(); i++)
|
for (int i = 0; i < list.size(); i++)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ModelValidator validator = (ModelValidator)list.get(i);
|
ModelValidator validator = list.get(i);
|
||||||
if (validator.getAD_Client_ID() == po.getAD_Client_ID())
|
if (validator.getAD_Client_ID() == po.getAD_Client_ID()
|
||||||
|
|| m_globalValidators.contains(validator))
|
||||||
{
|
{
|
||||||
String error = validator.modelChange(po, changeType);
|
String error = validator.modelChange(po, changeType);
|
||||||
if (error != null && error.length() > 0)
|
if (error != null && error.length() > 0)
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -215,7 +287,7 @@ public class ModelValidationEngine
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
} // fireModelChange
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -228,7 +300,10 @@ public class ModelValidationEngine
|
||||||
if (tableName == null || listener == null)
|
if (tableName == null || listener == null)
|
||||||
return;
|
return;
|
||||||
//
|
//
|
||||||
String propertyName = tableName + listener.getAD_Client_ID();
|
String propertyName =
|
||||||
|
m_globalValidators.contains(listener)
|
||||||
|
? tableName + "*"
|
||||||
|
: tableName + listener.getAD_Client_ID();
|
||||||
ArrayList<ModelValidator> list = (ArrayList<ModelValidator>)m_docValidateListeners.get(propertyName);
|
ArrayList<ModelValidator> list = (ArrayList<ModelValidator>)m_docValidateListeners.get(propertyName);
|
||||||
if (list == null)
|
if (list == null)
|
||||||
{
|
{
|
||||||
|
@ -249,14 +324,17 @@ public class ModelValidationEngine
|
||||||
{
|
{
|
||||||
if (tableName == null || listener == null)
|
if (tableName == null || listener == null)
|
||||||
return;
|
return;
|
||||||
String propertyName = tableName + listener.getAD_Client_ID();
|
String propertyName =
|
||||||
|
m_globalValidators.contains(listener)
|
||||||
|
? tableName + "*"
|
||||||
|
: tableName + listener.getAD_Client_ID();
|
||||||
ArrayList list = (ArrayList)m_docValidateListeners.get(propertyName);
|
ArrayList list = (ArrayList)m_docValidateListeners.get(propertyName);
|
||||||
if (list == null)
|
if (list == null)
|
||||||
return;
|
return;
|
||||||
list.remove(listener);
|
list.remove(listener);
|
||||||
if (list.size() == 0)
|
if (list.size() == 0)
|
||||||
m_docValidateListeners.remove(propertyName);
|
m_docValidateListeners.remove(propertyName);
|
||||||
} // removeModelValidator
|
} // removeDocValidate
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fire Document Validation.
|
* Fire Document Validation.
|
||||||
|
@ -269,25 +347,45 @@ public class ModelValidationEngine
|
||||||
{
|
{
|
||||||
if (po == null || m_docValidateListeners.size() == 0)
|
if (po == null || m_docValidateListeners.size() == 0)
|
||||||
return null;
|
return null;
|
||||||
//
|
|
||||||
String propertyName = po.get_TableName() + po.getAD_Client_ID();
|
|
||||||
ArrayList list = (ArrayList)m_docValidateListeners.get(propertyName);
|
|
||||||
if (list == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
//
|
String propertyName = po.get_TableName() + "*";
|
||||||
|
ArrayList<ModelValidator> list = m_docValidateListeners.get(propertyName);
|
||||||
|
if (list != null)
|
||||||
|
{
|
||||||
|
//ad_entitytype.modelvalidationclasses
|
||||||
|
String error = fireDocValidate(po, docTiming, list);
|
||||||
|
if (error != null && error.length() > 0)
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
propertyName = po.get_TableName() + po.getAD_Client_ID();
|
||||||
|
list = m_docValidateListeners.get(propertyName);
|
||||||
|
if (list != null)
|
||||||
|
{
|
||||||
|
//ad_client.modelvalidationclasses
|
||||||
|
String error = fireDocValidate(po, docTiming, list);
|
||||||
|
if (error != null && error.length() > 0)
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
} // fireDocValidate
|
||||||
|
|
||||||
|
private String fireDocValidate(PO po, int docTiming, ArrayList<ModelValidator> list)
|
||||||
|
{
|
||||||
for (int i = 0; i < list.size(); i++)
|
for (int i = 0; i < list.size(); i++)
|
||||||
{
|
{
|
||||||
ModelValidator validator = null;
|
ModelValidator validator = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
validator = (ModelValidator)list.get(i);
|
validator = list.get(i);
|
||||||
if (validator.getAD_Client_ID() == po.getAD_Client_ID())
|
if (validator.getAD_Client_ID() == po.getAD_Client_ID()
|
||||||
|
|| m_globalValidators.contains(validator))
|
||||||
{
|
{
|
||||||
String error = validator.docValidate(po, docTiming);
|
String error = validator.docValidate(po, docTiming);
|
||||||
if (error != null && error.length() > 0)
|
if (error != null && error.length() > 0)
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -300,7 +398,118 @@ public class ModelValidationEngine
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
} // fireModelChange
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* Add Accounting Facts Validation Listener
|
||||||
|
* @param tableName table name
|
||||||
|
* @param listener listener
|
||||||
|
*/
|
||||||
|
public void addFactsValidate (String tableName, FactsValidator listener)
|
||||||
|
{
|
||||||
|
if (tableName == null || listener == null)
|
||||||
|
return;
|
||||||
|
//
|
||||||
|
String propertyName =
|
||||||
|
m_globalValidators.contains(listener)
|
||||||
|
? tableName + "*"
|
||||||
|
: tableName + listener.getAD_Client_ID();
|
||||||
|
ArrayList<FactsValidator> list = (ArrayList<FactsValidator>)m_factsValidateListeners.get(propertyName);
|
||||||
|
if (list == null)
|
||||||
|
{
|
||||||
|
list = new ArrayList<FactsValidator>();
|
||||||
|
list.add(listener);
|
||||||
|
m_factsValidateListeners.put(propertyName, list);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
list.add(listener);
|
||||||
|
} // addFactsValidate
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove Accounting Facts Validation Listener
|
||||||
|
* @param tableName table name
|
||||||
|
* @param listener listener
|
||||||
|
*/
|
||||||
|
public void removeFactsValidate (String tableName, FactsValidator listener)
|
||||||
|
{
|
||||||
|
if (tableName == null || listener == null)
|
||||||
|
return;
|
||||||
|
String propertyName =
|
||||||
|
m_globalValidators.contains(listener)
|
||||||
|
? tableName + "*"
|
||||||
|
: tableName + listener.getAD_Client_ID();
|
||||||
|
ArrayList list = (ArrayList)m_factsValidateListeners.get(propertyName);
|
||||||
|
if (list == null)
|
||||||
|
return;
|
||||||
|
list.remove(listener);
|
||||||
|
if (list.size() == 0)
|
||||||
|
m_factsValidateListeners.remove(propertyName);
|
||||||
|
} // removeFactsValidate
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire Accounting Facts Validation.
|
||||||
|
* Call factsValidate method of added validators
|
||||||
|
* @param schema
|
||||||
|
* @param facts
|
||||||
|
* @param doc
|
||||||
|
* @param po
|
||||||
|
* @return error message or null
|
||||||
|
*/
|
||||||
|
public String fireFactsValidate (MAcctSchema schema, List<Fact> facts, PO po)
|
||||||
|
{
|
||||||
|
if (schema == null || facts == null || po == null || m_factsValidateListeners.size() == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
String propertyName = po.get_TableName() + "*";
|
||||||
|
ArrayList<FactsValidator> list = (ArrayList<FactsValidator>)m_factsValidateListeners.get(propertyName);
|
||||||
|
if (list != null)
|
||||||
|
{
|
||||||
|
//ad_entitytype.modelvalidationclasses
|
||||||
|
String error = fireFactsValidate(schema, facts, po, list);
|
||||||
|
if (error != null && error.length() > 0)
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
propertyName = po.get_TableName() + po.getAD_Client_ID();
|
||||||
|
list = (ArrayList<FactsValidator>)m_factsValidateListeners.get(propertyName);
|
||||||
|
if (list != null)
|
||||||
|
{
|
||||||
|
//ad_client.modelvalidationclasses
|
||||||
|
String error = fireFactsValidate(schema, facts, po, list);
|
||||||
|
if (error != null && error.length() > 0)
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
} // fireFactsValidate
|
||||||
|
|
||||||
|
private String fireFactsValidate(MAcctSchema schema, List<Fact> facts, PO po, ArrayList<FactsValidator> list)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < list.size(); i++)
|
||||||
|
{
|
||||||
|
FactsValidator validator = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
validator = list.get(i);
|
||||||
|
if (validator.getAD_Client_ID() == po.getAD_Client_ID())
|
||||||
|
{
|
||||||
|
String error = validator.factsValidate(schema, facts, po);
|
||||||
|
if (error != null && error.length() > 0)
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
// Exeptions are errors and should stop the document processing - teo_sarca [ 1679692 ]
|
||||||
|
// log.log(Level.SEVERE, validator.toString(), e);
|
||||||
|
String error = e.getMessage();
|
||||||
|
if (error == null)
|
||||||
|
error = e.toString();
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* String Representation
|
* String Representation
|
||||||
|
@ -371,7 +580,8 @@ public class ModelValidationEngine
|
||||||
for (int i = 0; i < m_validators.size(); i++)
|
for (int i = 0; i < m_validators.size(); i++)
|
||||||
{
|
{
|
||||||
ModelValidator validator = (ModelValidator)m_validators.get(i);
|
ModelValidator validator = (ModelValidator)m_validators.get(i);
|
||||||
if (AD_Client_ID == validator.getAD_Client_ID())
|
if (AD_Client_ID == validator.getAD_Client_ID()
|
||||||
|
|| m_globalValidators.contains(validator))
|
||||||
{
|
{
|
||||||
java.lang.reflect.Method m = null;
|
java.lang.reflect.Method m = null;
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -382,10 +382,10 @@ if (MMPolicy == null) throw new IllegalArgumentException ("MMPolicy is mandatory
|
||||||
*/
|
*/
|
||||||
public void setModelValidationClasses (String ModelValidationClasses)
|
public void setModelValidationClasses (String ModelValidationClasses)
|
||||||
{
|
{
|
||||||
if (ModelValidationClasses != null && ModelValidationClasses.length() > 255)
|
if (ModelValidationClasses != null && ModelValidationClasses.length() > 2000)
|
||||||
{
|
{
|
||||||
log.warning("Length > 255 - truncated");
|
log.warning("Length > 2000 - truncated");
|
||||||
ModelValidationClasses = ModelValidationClasses.substring(0, 254);
|
ModelValidationClasses = ModelValidationClasses.substring(0, 2000);
|
||||||
}
|
}
|
||||||
set_Value (COLUMNNAME_ModelValidationClasses, ModelValidationClasses);
|
set_Value (COLUMNNAME_ModelValidationClasses, ModelValidationClasses);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,220 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Product: Adempiere ERP & CRM Smart Business Solution *
|
||||||
|
* Copyright (C) 1999-2007 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 *
|
||||||
|
*****************************************************************************/
|
||||||
|
/** Generated Model - DO NOT CHANGE */
|
||||||
|
package org.compiere.model;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.Properties;
|
||||||
|
import org.compiere.util.KeyNamePair;
|
||||||
|
|
||||||
|
/** Generated Model for AD_ModelValidator
|
||||||
|
* @author Adempiere (generated)
|
||||||
|
* @version Release 3.3.0 - $Id$ */
|
||||||
|
public class X_AD_ModelValidator extends PO implements I_AD_ModelValidator, I_Persistent
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** Standard Constructor */
|
||||||
|
public X_AD_ModelValidator (Properties ctx, int AD_ModelValidator_ID, String trxName)
|
||||||
|
{
|
||||||
|
super (ctx, AD_ModelValidator_ID, trxName);
|
||||||
|
/** if (AD_ModelValidator_ID == 0)
|
||||||
|
{
|
||||||
|
setAD_ModelValidator_ID (0);
|
||||||
|
setEntityType (null);
|
||||||
|
setModelValidationClass (null);
|
||||||
|
setName (null);
|
||||||
|
} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Load Constructor */
|
||||||
|
public X_AD_ModelValidator (Properties ctx, ResultSet rs, String trxName)
|
||||||
|
{
|
||||||
|
super (ctx, rs, trxName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** AccessLevel
|
||||||
|
* @return 4 - System
|
||||||
|
*/
|
||||||
|
protected int get_AccessLevel()
|
||||||
|
{
|
||||||
|
return accessLevel.intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Load Meta Data */
|
||||||
|
protected POInfo initPO (Properties ctx)
|
||||||
|
{
|
||||||
|
POInfo poi = POInfo.getPOInfo (ctx, Table_ID);
|
||||||
|
return poi;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
StringBuffer sb = new StringBuffer ("X_AD_ModelValidator[")
|
||||||
|
.append(get_ID()).append("]");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set Model Validator.
|
||||||
|
@param AD_ModelValidator_ID Model Validator */
|
||||||
|
public void setAD_ModelValidator_ID (int AD_ModelValidator_ID)
|
||||||
|
{
|
||||||
|
if (AD_ModelValidator_ID < 1)
|
||||||
|
throw new IllegalArgumentException ("AD_ModelValidator_ID is mandatory.");
|
||||||
|
set_ValueNoCheck (COLUMNNAME_AD_ModelValidator_ID, Integer.valueOf(AD_ModelValidator_ID));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Model Validator.
|
||||||
|
@return Model Validator */
|
||||||
|
public int getAD_ModelValidator_ID ()
|
||||||
|
{
|
||||||
|
Integer ii = (Integer)get_Value(COLUMNNAME_AD_ModelValidator_ID);
|
||||||
|
if (ii == null)
|
||||||
|
return 0;
|
||||||
|
return ii.intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set Description.
|
||||||
|
@param Description
|
||||||
|
Optional short description of the record
|
||||||
|
*/
|
||||||
|
public void setDescription (String Description)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (Description != null && Description.length() > 255)
|
||||||
|
{
|
||||||
|
log.warning("Length > 255 - truncated");
|
||||||
|
Description = Description.substring(0, 255);
|
||||||
|
}
|
||||||
|
set_Value (COLUMNNAME_Description, Description);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Description.
|
||||||
|
@return Optional short description of the record
|
||||||
|
*/
|
||||||
|
public String getDescription ()
|
||||||
|
{
|
||||||
|
return (String)get_Value(COLUMNNAME_Description);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set Entity Type.
|
||||||
|
@param EntityType
|
||||||
|
Dictionary Entity Type; Determines ownership and synchronization
|
||||||
|
*/
|
||||||
|
public void setEntityType (String EntityType)
|
||||||
|
{
|
||||||
|
if (EntityType == null)
|
||||||
|
throw new IllegalArgumentException ("EntityType is mandatory.");
|
||||||
|
|
||||||
|
if (EntityType.length() > 40)
|
||||||
|
{
|
||||||
|
log.warning("Length > 40 - truncated");
|
||||||
|
EntityType = EntityType.substring(0, 40);
|
||||||
|
}
|
||||||
|
set_ValueNoCheck (COLUMNNAME_EntityType, EntityType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Entity Type.
|
||||||
|
@return Dictionary Entity Type; Determines ownership and synchronization
|
||||||
|
*/
|
||||||
|
public String getEntityType ()
|
||||||
|
{
|
||||||
|
return (String)get_Value(COLUMNNAME_EntityType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set Comment/Help.
|
||||||
|
@param Help
|
||||||
|
Comment or Hint
|
||||||
|
*/
|
||||||
|
public void setHelp (String Help)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (Help != null && Help.length() > 2000)
|
||||||
|
{
|
||||||
|
log.warning("Length > 2000 - truncated");
|
||||||
|
Help = Help.substring(0, 2000);
|
||||||
|
}
|
||||||
|
set_Value (COLUMNNAME_Help, Help);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Comment/Help.
|
||||||
|
@return Comment or Hint
|
||||||
|
*/
|
||||||
|
public String getHelp ()
|
||||||
|
{
|
||||||
|
return (String)get_Value(COLUMNNAME_Help);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set Model Validation Class.
|
||||||
|
@param ModelValidationClass Model Validation Class */
|
||||||
|
public void setModelValidationClass (String ModelValidationClass)
|
||||||
|
{
|
||||||
|
if (ModelValidationClass == null)
|
||||||
|
throw new IllegalArgumentException ("ModelValidationClass is mandatory.");
|
||||||
|
|
||||||
|
if (ModelValidationClass.length() > 255)
|
||||||
|
{
|
||||||
|
log.warning("Length > 255 - truncated");
|
||||||
|
ModelValidationClass = ModelValidationClass.substring(0, 255);
|
||||||
|
}
|
||||||
|
set_Value (COLUMNNAME_ModelValidationClass, ModelValidationClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Model Validation Class.
|
||||||
|
@return Model Validation Class */
|
||||||
|
public String getModelValidationClass ()
|
||||||
|
{
|
||||||
|
return (String)get_Value(COLUMNNAME_ModelValidationClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set Name.
|
||||||
|
@param Name
|
||||||
|
Alphanumeric identifier of the entity
|
||||||
|
*/
|
||||||
|
public void setName (String Name)
|
||||||
|
{
|
||||||
|
if (Name == null)
|
||||||
|
throw new IllegalArgumentException ("Name is mandatory.");
|
||||||
|
|
||||||
|
if (Name.length() > 120)
|
||||||
|
{
|
||||||
|
log.warning("Length > 120 - truncated");
|
||||||
|
Name = Name.substring(0, 120);
|
||||||
|
}
|
||||||
|
set_Value (COLUMNNAME_Name, Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Name.
|
||||||
|
@return Alphanumeric identifier of the entity
|
||||||
|
*/
|
||||||
|
public String getName ()
|
||||||
|
{
|
||||||
|
return (String)get_Value(COLUMNNAME_Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Record ID/ColumnName
|
||||||
|
@return ID/ColumnName pair
|
||||||
|
*/
|
||||||
|
public KeyNamePair getKeyNamePair()
|
||||||
|
{
|
||||||
|
return new KeyNamePair(get_ID(), getName());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue