From: Astrid S. <ast...@us...> - 2007-10-24 12:44:13
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/client/gui/j2d/entity In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv32420/src/games/stendhal/client/gui/j2d/entity Modified Files: Entity2DViewFactory.java Log Message: simplified Entity2Dfactory added tests to prove it still works made chest constructor for the sake of testing Index: Entity2DViewFactory.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/client/gui/j2d/entity/Entity2DViewFactory.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Entity2DViewFactory.java 22 Oct 2007 13:03:38 -0000 1.4 --- Entity2DViewFactory.java 24 Oct 2007 12:43:33 -0000 1.5 *************** *** 13,18 **** import games.stendhal.client.entity.BossCreature; import games.stendhal.client.entity.Box; - import games.stendhal.client.entity.Chest; import games.stendhal.client.entity.CarrotGrower; import games.stendhal.client.entity.Corpse; import games.stendhal.client.entity.Creature; --- 13,18 ---- import games.stendhal.client.entity.BossCreature; import games.stendhal.client.entity.Box; import games.stendhal.client.entity.CarrotGrower; + import games.stendhal.client.entity.Chest; import games.stendhal.client.entity.Corpse; import games.stendhal.client.entity.Creature; *************** *** 51,76 **** */ public class Entity2DViewFactory { // implements EntityViewFactory { ! /** ! * Log4J. ! */ ! private static final Logger logger = Log4J.getLogger(Entity2DViewFactory.class); ! /** * The shared instance. */ ! private static final Entity2DViewFactory sharedInstance = new Entity2DViewFactory(); /** * The model-to-view class map. */ ! protected Map<Class, Class> map; /** * Create an entity view factory. */ ! public Entity2DViewFactory() { ! map = new HashMap<Class, Class>(); - configure(); } --- 51,72 ---- */ public class Entity2DViewFactory { // implements EntityViewFactory { ! Logger logger = Log4J.getLogger(Entity2DViewFactory.class); /** * The shared instance. */ ! protected static Entity2DViewFactory sharedInstance; /** * The model-to-view class map. */ ! protected Map<Class<? extends Entity>, Class<? extends Entity2DView>> map; /** * Create an entity view factory. */ ! protected Entity2DViewFactory() { ! map = new HashMap<Class<? extends Entity>, Class<? extends Entity2DView>>(); ! } *************** *** 88,143 **** */ public Entity2DView create(Entity entity) { ! Class entityClass = entity.getClass(); ! Class viewClass = getViewClass(entityClass); ! if (viewClass == null) { ! return null; ! } ! /* ! * Is it an Entity2DView? ! */ ! if (!Entity2DView.class.isAssignableFrom(viewClass)) { ! logger.error("Class is not an Entity2DView: " + viewClass.getName()); ! return null; } ! /* ! * Search for a constructor with a compatible parameter type. The VM ! * doesn't implicitely match super-classes. ! */ ! Constructor cnstr = null; ! while (entityClass != null) { ! try { ! cnstr = viewClass.getConstructor(new Class[] { entityClass }); ! break; ! } catch (NoSuchMethodException ex) { ! } ! entityClass = entityClass.getSuperclass(); ! } ! if (cnstr == null) { ! logger.error("Unable to find sutable contructor for: " ! + viewClass.getName()); ! return null; } - /* - * Create the view - */ - try { - return (Entity2DView) cnstr.newInstance(new Object[] { entity }); - } catch (InstantiationException ex) { - logger.error("Unable to create class: " + viewClass.getName(), ex); - return null; - } catch (IllegalAccessException ex) { - logger.error("Unable to access class: " + viewClass.getName(), ex); - return null; - } catch (InvocationTargetException ex) { - logger.error("Error creating class: " + viewClass.getName(), ex); - return null; - } } --- 84,115 ---- */ public Entity2DView create(Entity entity) { ! Class<? extends Entity2DView> viewClass = map.get(entity.getClass()); ! Constructor<? extends Entity2DView> view; ! try { ! view = viewClass.getConstructor(entity.getClass()); ! return view.newInstance(entity); ! } catch (SecurityException e) { ! logger.error(e); ! } catch (NoSuchMethodException e) { ! ! logger.error(e); } ! catch (IllegalArgumentException e) { ! logger.error(e); ! } catch (InstantiationException e) { ! logger.error(e); ! } catch (IllegalAccessException e) { ! logger.error(e); ! } catch (InvocationTargetException e) { ! logger.error(e); } + return null; } *************** *** 146,176 **** */ protected void configure() { ! register(Blood.class, Blood2DView.class); ! register(BossCreature.class, BossCreature2DView.class); ! register(Box.class, Box2DView.class); ! register(CarrotGrower.class, CarrotGrower2DView.class); ! register(Chest.class, Chest2DView.class); ! register(Corpse.class, Corpse2DView.class); ! register(Creature.class, Creature2DView.class); ! register(Door.class, Door2DView.class); ! register(Fire.class, AnimatedLoopEntity2DView.class); ! register(FishSource.class, FishSource2DView.class); ! register(GoldSource.class, GoldSource2DView.class); ! register(GrainField.class, GrainField2DView.class); ! register(InvisibleEntity.class, InvisibleEntity2DView.class); ! register(Item.class, Item2DView.class); ! register(NPC.class, NPC2DView.class); ! register(Pet.class, Pet2DView.class); ! register(PlantGrower.class, PlantGrower2DView.class); ! register(Player.class, Player2DView.class); ! register(Portal.class, Portal2DView.class); ! register(Ring.class, Ring2DView.class); ! register(Sheep.class, Sheep2DView.class); ! register(SheepFood.class, SheepFood2DView.class); ! register(Sign.class, Sign2DView.class); ! register(Spell.class, Spell2DView.class); ! register(StackableItem.class, StackableItem2DView.class); ! register(User.class, User2DView.class); ! register(WellSource.class, WellSource2DView.class); } --- 118,148 ---- */ protected void configure() { ! map.put(Blood.class, Blood2DView.class); ! map.put(BossCreature.class, BossCreature2DView.class); ! map.put(Box.class, Box2DView.class); ! map.put(CarrotGrower.class, CarrotGrower2DView.class); ! map.put(Chest.class, Chest2DView.class); ! map.put(Corpse.class, Corpse2DView.class); ! map.put(Creature.class, Creature2DView.class); ! map.put(Door.class, Door2DView.class); ! map.put(Fire.class, AnimatedLoopEntity2DView.class); ! map.put(FishSource.class, FishSource2DView.class); ! map.put(GoldSource.class, GoldSource2DView.class); ! map.put(GrainField.class, GrainField2DView.class); ! map.put(InvisibleEntity.class, InvisibleEntity2DView.class); ! map.put(Item.class, Item2DView.class); ! map.put(NPC.class, NPC2DView.class); ! map.put(Pet.class, Pet2DView.class); ! map.put(PlantGrower.class, PlantGrower2DView.class); ! map.put(Player.class, Player2DView.class); ! map.put(Portal.class, Portal2DView.class); ! map.put(Ring.class, Ring2DView.class); ! map.put(Sheep.class, Sheep2DView.class); ! map.put(SheepFood.class, SheepFood2DView.class); ! map.put(Sign.class, Sign2DView.class); ! map.put(Spell.class, Spell2DView.class); ! map.put(StackableItem.class, StackableItem2DView.class); ! map.put(User.class, User2DView.class); ! map.put(WellSource.class, WellSource2DView.class); } *************** *** 179,217 **** */ public static Entity2DViewFactory get() { ! return sharedInstance; ! } ! ! /** ! * Get the appropriete view class for a given entity class. ! * ! * @param entityClass ! * The entity class. ! * ! * @return A view class, or <code>null</code> if unknown. ! */ ! protected Class getViewClass(Class entityClass) { ! while (entityClass != null) { ! Class viewClass = map.get(entityClass); ! ! if (viewClass != null) { ! return viewClass; ! } ! ! entityClass = entityClass.getSuperclass(); } ! ! return null; ! } ! ! /** ! * Register an enity model-to-view mapping. ! * ! * @param entityClass ! * The entity model class. ! * @param viewClass ! * The entity view class. ! */ ! public void register(Class entityClass, Class viewClass) { ! map.put(entityClass, viewClass); } } --- 151,159 ---- */ public static Entity2DViewFactory get() { ! if (sharedInstance==null){ ! sharedInstance = new Entity2DViewFactory(); ! sharedInstance.configure(); } ! return sharedInstance; } } |