/****************************************************************************** * Copyright (C) 2013 Heng Sin Low * * Copyright (C) 2013 Trek Global * * 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 java.util.logging.Level; import org.adempiere.base.equinox.EquinoxExtensionLocator; import org.compiere.process.ProcessCall; import org.compiere.util.CLogger; /** * Default {@link IProcessFactory} implementation for core.
* Load {@link ProcessCall} instance from plugin.xml (org.adempiere.base.Process extension point) or class path. * @author hengsin */ public class DefaultProcessFactory implements IProcessFactory { private final static CLogger log = CLogger.getCLogger(DefaultProcessFactory.class); /** * default constructor */ public DefaultProcessFactory() { } /* (non-Javadoc) * @see org.adempiere.base.IProcessFactory#newProcessInstance(java.lang.String) */ @Override public ProcessCall newProcessInstance(String className) { ProcessCall process = null; process = EquinoxExtensionLocator.instance().locate(ProcessCall.class, "org.adempiere.base.Process", className, null).getExtension(); if (process == null) { //Get Class Class processClass = null; //use context classloader if available ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader != null) { try { processClass = classLoader.loadClass(className); } catch (ClassNotFoundException ex) { if (log.isLoggable(Level.FINE))log.log(Level.FINE, className, ex); } } if (processClass == null) { classLoader = this.getClass().getClassLoader(); try { processClass = classLoader.loadClass(className); } catch (ClassNotFoundException ex) { log.log(Level.WARNING, className, ex); return null; } } if (processClass == null) { return null; } //Get Process try { process = (ProcessCall)processClass.getDeclaredConstructor().newInstance(); } catch (Exception ex) { log.log(Level.WARNING, "Instance for " + className, ex); return null; } } return process; } }