/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License, version 3 as published by the Free Software * Foundation. * * You should have received a copy of the GNU General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * 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. * * Copyright 2005 - 2013 Pentaho Corporation. All rights reserved. */ package org.pentaho.test.platform.engine.core; import org.pentaho.platform.api.engine.IPentahoInitializer; import org.pentaho.platform.api.engine.IPentahoObjectFactory; import org.pentaho.platform.api.engine.IPentahoObjectReference; import org.pentaho.platform.api.engine.IPentahoSession; import org.pentaho.platform.api.engine.ObjectFactoryException; import java.util.HashMap; import java.util.List; import java.util.Map; @SuppressWarnings( "nls" ) /** * A very simplistic implementation of IPentahoObjectFactory which allows * the user to programmatically define platform objects for later instancing. * @author aphillips */ public class SimpleObjectFactory implements IPentahoObjectFactory { private HashMap<String, String> classnamesMap = new HashMap<String, String>(); public <T> T get( Class<T> interfaceClass, IPentahoSession session ) throws ObjectFactoryException { return get( interfaceClass, interfaceClass.getSimpleName(), session ); } @SuppressWarnings( "unchecked" ) public <T> T get( Class<T> interfaceClass, String key, IPentahoSession session ) throws ObjectFactoryException { String classname = classnamesMap.get( key ); try { Class implClass = Class.forName( classname ); T t = (T) implClass.newInstance(); if ( t instanceof IPentahoInitializer ) { ( (IPentahoInitializer) t ).init( session ); } return t; } catch ( Throwable th ) { throw new ObjectFactoryException( "Could not create instance for class " + classname, th ); } } public Class<?> getImplementingClass( String key ) { try { return Class.forName( classnamesMap.get( key ) ); } catch ( ClassNotFoundException e ) { e.printStackTrace(); return null; } } public void init( String configFile, Object context ) { } public boolean objectDefined( String key ) { return classnamesMap.containsKey( key ); } /** * Register an object for creation. * * @param key * identifying string * @param classname * must be a fully qualified class name for a top-level or nested top-level (static inner) class */ public void defineObject( String key, String classname ) { classnamesMap.put( key, classname ); } @Override public <T> List<T> getAll( Class<T> interfaceClass, IPentahoSession curSession ) throws ObjectFactoryException { return null; // To change body of implemented methods use File | Settings | File Templates. } @Override public <T> IPentahoObjectReference<T> getObjectReference( Class<T> clazz, IPentahoSession curSession ) { return null; // To change body of implemented methods use File | Settings | File Templates. } @Override public <T> T get( Class<T> interfaceClass, IPentahoSession session, Map<String, String> properties ) throws ObjectFactoryException { return null; // To change body of implemented methods use File | Settings | File Templates. } @Override public boolean objectDefined( Class<?> clazz ) { return false; // To change body of implemented methods use File | Settings | File Templates. } @Override public <T> IPentahoObjectReference<T> getObjectReference( Class<T> interfaceClass, IPentahoSession curSession, Map<String, String> properties ) { return null; // To change body of implemented methods use File | Settings | File Templates. } @Override public <T> List<IPentahoObjectReference<T>> getObjectReferences( Class<T> interfaceClass, IPentahoSession curSession ) { return null; // To change body of implemented methods use File | Settings | File Templates. } @Override public <T> List<IPentahoObjectReference<T>> getObjectReferences( Class<T> interfaceClass, IPentahoSession curSession, Map<String, String> properties ) { return null; // To change body of implemented methods use File | Settings | File Templates. } @Override public <T> List<T> getAll( Class<T> interfaceClass, IPentahoSession curSession, Map<String, String> properties ) throws ObjectFactoryException { return null; // To change body of implemented methods use File | Settings | File Templates. } @Override public String getName() { return "Simple Object Factory"; } }