/******************************************************************************
* 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) : Layda Salas - globalqss *
*****************************************************************************/
package org.compiere.model;
import org.adempiere.base.event.IEventTopics;
/**
* Model Validator
*
* @author Jorg Janke
* @version $Id: ModelValidator.java,v 1.2 2006/07/30 00:58:18 jjanke Exp $
*
* 2007/02/26 laydasalasc - globalqss - Add new timings for all before/after events on documents
*/
public interface ModelValidator
{
/** Model Change Type New */
public static final int TYPE_BEFORE_NEW = 1; // teo_sarca [ 1675490 ]
public static final int TYPE_NEW = 1;
@Deprecated
public static final int CHANGETYPE_NEW = 1; // Compatibility with Compiere 260c
public static final int TYPE_AFTER_NEW = 4; // teo_sarca [ 1675490 ]
public static final int TYPE_AFTER_NEW_REPLICATION = 7; // @Trifon
/** Model Change Type Change */
public static final int TYPE_BEFORE_CHANGE = 2; // teo_sarca [ 1675490 ]
public static final int TYPE_CHANGE = 2;
@Deprecated
public static final int CHANGETYPE_CHANGE = 2; // Compatibility with Compiere 260c
public static final int TYPE_AFTER_CHANGE = 5; // teo_sarca [ 1675490 ]
public static final int TYPE_AFTER_CHANGE_REPLICATION = 8; // @Trifon
/** Model Change Type Delete */
public static final int TYPE_BEFORE_DELETE = 3; // teo_sarca [ 1675490 ]
public static final int TYPE_DELETE = 3;
@Deprecated
public static final int CHANGETYPE_DELETE = 3; // Compatibility with Compiere 260c
public static final int TYPE_AFTER_DELETE = 6; // teo_sarca [ 1675490 ]
public static final int TYPE_BEFORE_DELETE_REPLICATION = 9; // @Trifon
// Correlation between AD_Table_ScriptValidator.EventModelValidator constants and model change TYPE_ constants.
public static String[] tableEventValidators = new String[] {
"", // 0
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_TableBeforeNew, // TYPE_BEFORE_NEW = 1
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_TableBeforeChange, // TYPE_BEFORE_CHANGE = 2
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_TableBeforeDelete, // TYPE_BEFORE_DELETE = 3
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_TableAfterNew, // TYPE_AFTER_NEW = 4
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_TableAfterChange, // TYPE_AFTER_CHANGE = 5
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_TableAfterDelete, // TYPE_AFTER_DELETE = 6
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_TableAfterNewReplication, // TYPE_AFTER_NEW_REPLICATION = 7
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_TableAfterChangeReplication, // TYPE_AFTER_CHANGE_REPLICATION = 8
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_TableBeforeDeleteReplication // TYPE_BEFORE_DELETE_REPLICATION = 9
};
// Correlation between OSGi event topic and model change TYPE_ constants
public static String[] tableEventTopics = new String[] {
"", // 0
IEventTopics.PO_BEFORE_NEW, // TYPE_BEFORE_NEW = 1
IEventTopics.PO_BEFORE_CHANGE, // TYPE_BEFORE_CHANGE = 2
IEventTopics.PO_BEFORE_DELETE, // TYPE_BEFORE_DELETE = 3
IEventTopics.PO_AFTER_NEW, // TYPE_AFTER_NEW = 4
IEventTopics.PO_AFTER_CHANGE, // TYPE_AFTER_CHANGE = 5
IEventTopics.PO_AFTER_DELETE, // TYPE_AFTER_DELETE = 6
IEventTopics.PO_AFTER_NEW_REPLICATION, // TYPE_AFTER_NEW_REPLICATION = 7
IEventTopics.PO_AFTER_CHANGE_REPLICATION, // TYPE_AFTER_CHANGE_REPLICATION = 8
IEventTopics.PO_BEFORE_DELETE_REPLICATION// TYPE_BEFORE_DELETE_REPLICATION = 9
};
/** Called before document is prepared */
public static final int TIMING_BEFORE_PREPARE = 1;
@Deprecated
public static final int DOCTIMING_BEFORE_PREPARE = 1; // Compatibility with Compiere 260c
/** Called before document is void */
public static final int TIMING_BEFORE_VOID = 2;
/** Called before document is close */
public static final int TIMING_BEFORE_CLOSE = 3;
/** Called before document is reactivate */
public static final int TIMING_BEFORE_REACTIVATE = 4;
/** Called before document is reversecorrect */
public static final int TIMING_BEFORE_REVERSECORRECT = 5;
/** Called before document is reverseaccrual */
public static final int TIMING_BEFORE_REVERSEACCRUAL = 6;
/** Called before document is completed */
public static final int TIMING_BEFORE_COMPLETE = 7;
/** Called after document is prepared */
public static final int TIMING_AFTER_PREPARE = 8;
/** Called after document is completed */
public static final int TIMING_AFTER_COMPLETE = 9;
@Deprecated
public static final int DOCTIMING_AFTER_COMPLETE = 9; // Compatibility with Compiere 260c
/** Called after document is void */
public static final int TIMING_AFTER_VOID = 10;
/** Called after document is closed */
public static final int TIMING_AFTER_CLOSE = 11;
/** Called after document is reactivated */
public static final int TIMING_AFTER_REACTIVATE = 12;
/** Called after document is reversecorrect */
public static final int TIMING_AFTER_REVERSECORRECT = 13;
/** Called after document is reverseaccrual */
public static final int TIMING_AFTER_REVERSEACCRUAL = 14;
/** Called before document is posted */
public static final int TIMING_BEFORE_POST = 15;
/** Called after document is posted */
public static final int TIMING_AFTER_POST = 16;
// Correlation between AD_Table_ScriptValidator.EventModelValidator constants and document change TIMING_ constants.
public static String[] documentEventValidators = new String[] {
"", // 0
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentBeforePrepare, // TIMING_BEFORE_PREPARE = 1
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentBeforeVoid, // TIMING_BEFORE_VOID = 2
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentBeforeClose, // TIMING_BEFORE_CLOSE = 3
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentBeforeReactivate, // TIMING_BEFORE_REACTIVATE = 4
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentBeforeReverseCorrect, // TIMING_BEFORE_REVERSECORRECT = 5
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentBeforeReverseAccrual, // TIMING_BEFORE_REVERSEACCRUAL = 6
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentBeforeComplete, // TIMING_BEFORE_COMPLETE = 7
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentAfterPrepare, // TIMING_AFTER_PREPARE = 8
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentAfterComplete, // TIMING_AFTER_COMPLETE = 9
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentAfterVoid, // TIMING_AFTER_VOID = 10
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentAfterClose, // TIMING_AFTER_CLOSE = 11
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentAfterReactivate, // TIMING_AFTER_REACTIVATE = 12
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentAfterReverseCorrect, // TIMING_AFTER_REVERSECORRECT = 13
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentAfterReverseAccrual, // TIMING_AFTER_REVERSEACCRUAL = 14
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentBeforePost, // TIMING_BEFORE_POST = 15
X_AD_Table_ScriptValidator.EVENTMODELVALIDATOR_DocumentAfterPost // TIMING_AFTER_POST = 16
};
// Correlation between OSGi event topics and document change TIMING_ constants.
public static String[] documentEventTopics = new String[] {
"", // 0
IEventTopics.DOC_BEFORE_PREPARE, // TIMING_BEFORE_PREPARE = 1
IEventTopics.DOC_BEFORE_VOID, // TIMING_BEFORE_VOID = 2
IEventTopics.DOC_BEFORE_CLOSE, // TIMING_BEFORE_CLOSE = 3
IEventTopics.DOC_BEFORE_REACTIVATE, // TIMING_BEFORE_REACTIVATE = 4
IEventTopics.DOC_BEFORE_REVERSECORRECT, // TIMING_BEFORE_REVERSECORRECT = 5
IEventTopics.DOC_BEFORE_REVERSEACCRUAL, // TIMING_BEFORE_REVERSEACCRUAL = 6
IEventTopics.DOC_BEFORE_COMPLETE, // TIMING_BEFORE_COMPLETE = 7
IEventTopics.DOC_AFTER_PREPARE, // TIMING_AFTER_PREPARE = 8
IEventTopics.DOC_AFTER_COMPLETE, // TIMING_AFTER_COMPLETE = 9
IEventTopics.DOC_AFTER_VOID, // TIMING_AFTER_VOID = 10
IEventTopics.DOC_AFTER_CLOSE, // TIMING_AFTER_CLOSE = 11
IEventTopics.DOC_AFTER_REACTIVATE, // TIMING_AFTER_REACTIVATE = 12
IEventTopics.DOC_AFTER_REVERSECORRECT, // TIMING_AFTER_REVERSECORRECT = 13
IEventTopics.DOC_AFTER_REVERSEACCRUAL, // TIMING_AFTER_REVERSEACCRUAL = 14
IEventTopics.DOC_BEFORE_POST, // TIMING_BEFORE_POST = 15
IEventTopics.DOC_AFTER_POST // TIMING_AFTER_POST = 16
};
/**
* Initialize validator.
* @param engine validation engine
* @param client optional client. null for validator that's applicable to all client.
*/
public void initialize (ModelValidationEngine engine, MClient client);
/**
* Get Client to be monitored
* @return AD_Client_ID or 0
*/
public int getAD_Client_ID();
/**
* User logged in.
* Called before preferences are set.
* @param AD_Org_ID org
* @param AD_Role_ID role
* @param AD_User_ID user
* @return error message or null
*/
public String login (int AD_Org_ID, int AD_Role_ID, int AD_User_ID);
/**
* Model change event of a Table.
* @param po persistent object
* @param type TYPE_ event
* @return error message or null
* @exception Exception if the recipient wishes the change to be not accept.
*/
public String modelChange (PO po, int type) throws Exception;
/**
* Validate Document Action.
* Called as first step of DocAction.prepareIt
* or at the end of DocAction.completeIt.
* Note that totals, etc. may not be correct before the prepare stage.
* @param po persistent object
* @param timing see TIMING_ constants
* @return error message or null -
* if not null, the document will be marked as Invalid.
*/
public String docValidate (PO po, int timing);
} // ModelValidator