package vooga.towerdefense.gameeditor.gamemaker.editorscreens.mapeditor; import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.util.ArrayList; import java.util.List; import vooga.towerdefense.gameeditor.controller.GameEditorController; import vooga.towerdefense.model.tiles.factories.TileFactory; /** * This class uses reflection to get the files and classes contained in a * package and instantiates the classes. * * @author Leonard K. Ng'eno * */ public class TileFactoryLoader { private GameEditorController myController; TileFactoryLoader (GameEditorController controller) { myController = controller; } /** * * @param packageName name of the package * @return array of file names */ public File[] getImages (String packageName) { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); URL resource = classLoader.getResource(packageName); File directory = new File(resource.getFile()); if (directory.exists()) { File[] files = directory.listFiles(); return files; } return null; } /** * instantiates tile factories * * @param packageName name of the package */ @SuppressWarnings({ "rawtypes", "static-access" }) public List<TileFactory> initTileFactories (String packageName) { List<Class> classes = new ArrayList<Class>(); List<TileFactory> tilefactories = new ArrayList<TileFactory>(); classes = myController.getClassesInPackage(packageName); for (Class myClass : classes) { try { if (myClass != vooga.towerdefense.model.tiles.factories.TileFactory.class) { try { @SuppressWarnings("unchecked") Constructor ctor = myClass.getConstructor(); try { tilefactories.add((TileFactory) ctor.newInstance()); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return tilefactories; } }