/* JWildfire - an image and animation processor written in Java Copyright (C) 1995-2017 Andreas Maschke This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This software 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this software; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jwildfire.create.tina.randomflame; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.jwildfire.base.Unchecker; public class RandomFlameGeneratorList { public static final String DEFAULT_GENERATOR_NAME = new AllRandomFlameGenerator().getName(); private static List<Class<? extends RandomFlameGenerator>> items = new ArrayList<Class<? extends RandomFlameGenerator>>(); private static final List<String> nameList; static { registerRandomFlameGenerator(AllRandomFlameGenerator.class); registerRandomFlameGenerator(BlackAndWhiteRandomFlameGenerator.class); registerRandomFlameGenerator(BokehRandomFlameGenerator.class); registerRandomFlameGenerator(BrokatRandomFlameGenerator.class); registerRandomFlameGenerator(Brokat3DRandomFlameGenerator.class); registerRandomFlameGenerator(BubblesRandomFlameGenerator.class); registerRandomFlameGenerator(Bubbles3DRandomFlameGenerator.class); registerRandomFlameGenerator(CrossRandomFlameGenerator.class); registerRandomFlameGenerator(ExperimentalBubbles3DRandomFlameGenerator.class); registerRandomFlameGenerator(DualityRandomFlameGenerator.class); registerRandomFlameGenerator(DuckiesRandomFlameGenerator.class); registerRandomFlameGenerator(GalaxiesRandomFlameGenerator.class); registerRandomFlameGenerator(GnarlRandomFlameGenerator.class); registerRandomFlameGenerator(Gnarl3DRandomFlameGenerator.class); registerRandomFlameGenerator(ExperimentalGnarlRandomFlameGenerator.class); registerRandomFlameGenerator(Flowers3DRandomFlameGenerator.class); registerRandomFlameGenerator(FilledFlowers3DRandomFlameGenerator.class); registerRandomFlameGenerator(GhostsRandomFlameGenerator.class); registerRandomFlameGenerator(OrchidsRandomFlameGenerator.class); registerRandomFlameGenerator(SpiralsRandomFlameGenerator.class); registerRandomFlameGenerator(Spirals3DRandomFlameGenerator.class); registerRandomFlameGenerator(JulianDiscRandomFlameGenerator.class); registerRandomFlameGenerator(JuliansRandomFlameGenerator.class); registerRandomFlameGenerator(LayersRandomFlameGenerator.class); registerRandomFlameGenerator(MachineRandomFlameGenerator.class); registerRandomFlameGenerator(MandelbrotRandomFlameGenerator.class); registerRandomFlameGenerator(RaysRandomFlameGenerator.class); registerRandomFlameGenerator(SimpleRandomFlameGenerator.class); registerRandomFlameGenerator(ExperimentalSimpleRandomFlameGenerator.class); registerRandomFlameGenerator(LinearRandomFlameGenerator.class); registerRandomFlameGenerator(SierpinskyRandomFlameGenerator.class); registerRandomFlameGenerator(SimpleTilingRandomFlameGenerator.class); registerRandomFlameGenerator(SolidExperimentalRandomFlameGenerator.class); registerRandomFlameGenerator(SolidStunningRandomFlameGenerator.class); registerRandomFlameGenerator(SolidLabyrinthRandomFlameGenerator.class); registerRandomFlameGenerator(SolidJulia3DRandomFlameGenerator.class); registerRandomFlameGenerator(SolidShadowsRandomFlameGenerator.class); registerRandomFlameGenerator(SphericalRandomFlameGenerator.class); registerRandomFlameGenerator(Spherical3DRandomFlameGenerator.class); registerRandomFlameGenerator(SplitsRandomFlameGenerator.class); registerRandomFlameGenerator(SubFlameRandomFlameGenerator.class); registerRandomFlameGenerator(SynthRandomFlameGenerator.class); registerRandomFlameGenerator(TentacleRandomFlameGenerator.class); registerRandomFlameGenerator(TileBallRandomFlameGenerator.class); registerRandomFlameGenerator(ColorMapRandomFlameGenerator.class); registerRandomFlameGenerator(XenomorphRandomFlameGenerator.class); // registerRandomFlameGenerator(WikimediaCommonsRandomFlameGenerator.class); Collections.sort(items, new Comparator<Class<? extends RandomFlameGenerator>>() { @Override public int compare(Class<? extends RandomFlameGenerator> o1, Class<? extends RandomFlameGenerator> o2) { try { return o1.newInstance().getName().compareTo(o2.newInstance().getName()); } catch (Exception ex) { Unchecker.rethrow(ex); return 0; } } }); nameList = new ArrayList<>(); for (Class<? extends RandomFlameGenerator> funcCls : items) { try { nameList.add(funcCls.newInstance().getName()); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } private static void registerRandomFlameGenerator(Class<? extends RandomFlameGenerator> pRandomFlameGenerator) { items.add(pRandomFlameGenerator); } public static List<String> getNameList() { return nameList; } public static RandomFlameGenerator getRandomFlameGeneratorInstance(String pName) { return getRandomFlameGeneratorInstance(pName, false); } public static Class<? extends RandomFlameGenerator> getGeneratorClassByName(String pName) { int idx = getNameList().indexOf(pName); return idx >= 0 ? items.get(idx) : null; } public static RandomFlameGenerator getRandomFlameGeneratorInstance(String pName, boolean pFatal) { Class<? extends RandomFlameGenerator> funcCls = getGeneratorClassByName(pName); if (funcCls != null) { try { RandomFlameGenerator func = funcCls.newInstance(); return func; } catch (Throwable e) { e.printStackTrace(); } } if (pFatal) { throw new IllegalArgumentException(pName); } return null; } }