/****************************************************************************** * Copyright (C) 2009 Low Heng Sin * * Copyright (C) 2009 Idalica Corporation * * 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.webui.apps.form; import java.util.HashMap; import java.util.logging.Level; import org.compiere.grid.ICreateFrom; import org.compiere.model.GridTab; import org.compiere.model.I_C_BankStatement; import org.compiere.model.I_C_Invoice; import org.compiere.model.I_M_InOut; import org.compiere.model.I_M_RMA; import org.compiere.util.CLogger; import org.compiere.util.Env; public class WCreateFromFactory { /** Static Logger */ private static CLogger s_log = CLogger.getCLogger (WCreateFromFactory.class); /** Registered classes map (AD_Table_ID -> Class) */ private static HashMap<Integer, Class<? extends ICreateFrom>> s_registeredClasses = null; /** * Register custom VCreateFrom* class * @param ad_table_id * @param cl custom class */ public static final void registerClass(int ad_table_id, Class<? extends ICreateFrom> cl) { s_registeredClasses.put(ad_table_id, cl); s_log.info("Registered AD_Table_ID="+ad_table_id+", Class="+cl); } static { // Register defaults: s_registeredClasses = new HashMap<Integer, Class<? extends ICreateFrom>>(); s_registeredClasses.put(I_C_Invoice.Table_ID, WCreateFromInvoiceUI.class); s_registeredClasses.put(I_C_BankStatement.Table_ID, WCreateFromStatementUI.class); s_registeredClasses.put(I_M_InOut.Table_ID, WCreateFromShipmentUI.class); s_registeredClasses.put(I_M_RMA.Table_ID, WCreateFromRMAUI.class); } /** * Factory - called from APanel * @param mTab Model Tab for the trx * @return JDialog */ public static ICreateFrom create (GridTab mTab) { // dynamic init preparation int AD_Table_ID = Env.getContextAsInt(Env.getCtx(), mTab.getWindowNo(), "BaseTable_ID"); ICreateFrom retValue = null; Class<? extends ICreateFrom> cl = s_registeredClasses.get(AD_Table_ID); if (cl != null) { try { java.lang.reflect.Constructor<? extends ICreateFrom> ctor = cl.getConstructor(GridTab.class); retValue = ctor.newInstance(mTab); } catch (Throwable e) { s_log.log(Level.SEVERE, e.getLocalizedMessage(), e); return null; } } if (retValue == null) { s_log.info("Unsupported AD_Table_ID=" + AD_Table_ID); return null; } return retValue; } // create }