r2270 - trunk/nuiton-utils/src/main/java/org/nuiton/util
Author: bpoussin Date: 2012-01-07 21:47:08 +0100 (Sat, 07 Jan 2012) New Revision: 2270 Url: http://nuiton.org/repositories/revision/nuiton-utils/2270 Log: Evolution #1885: [ApplicationConfig] add method to put and retrieved object to use config as ContextApplication Modified: trunk/nuiton-utils/src/main/java/org/nuiton/util/ApplicationConfig.java Modified: trunk/nuiton-utils/src/main/java/org/nuiton/util/ApplicationConfig.java =================================================================== --- trunk/nuiton-utils/src/main/java/org/nuiton/util/ApplicationConfig.java 2012-01-06 14:34:01 UTC (rev 2269) +++ trunk/nuiton-utils/src/main/java/org/nuiton/util/ApplicationConfig.java 2012-01-07 20:47:08 UTC (rev 2270) @@ -410,6 +410,9 @@ /** suport of config modification. */ protected PropertyChangeSupport pcs = new PropertyChangeSupport(this); + /** permet de conserver des objets associe avec ce ApplicationConfig */ + transient protected Map<String, Object> context = new HashMap<String, Object>(); + /** * Init ApplicationConfig with current simple class name as config file. * @@ -996,6 +999,138 @@ } /** + * Retourne si un option existe ou non + * @param key + * @return + */ + public boolean hasOption(String key) { + // on est oblige de faire un get, car le containsKey n'est pas recursif + // sur tous les properties + boolean result = options.getProperty(key) != null; + return result; + } + + /** + * Retourne si un option existe ou non + * @param key + * @return + */ + public boolean hasOption(OptionDef key) { + boolean result = hasOption(key.getKey()); + return result; + } + + /** + * ajoute un objet dans le context, la classe de l'objet est utilise comme cle + * @since 2.4.2 + */ + public void putObject(Object o) { + putObject(o.getClass().getName(), o); + } + + /** + * ajoute un objet dans le context, 'name' est utilise comme cle + * @since 2.4.2 + */ + public void putObject(String name, Object o) { + context.put(name, o); + } + + /** + * recupere un objet de la class<E>, s'il n'existe pas encore, il est cree + * (il faut donc que class<E> soit instanciable + * + * E peut prendre en argument du contruteur un objet de type ApplicationConfig + * + * @since 2.4.2 + */ + public <E> E getObject(Class<E> clazz) { + E result = getObject(clazz, clazz.getName()); + return result; + } + + /** + * recupere un objet ayant le nom 'name', s'il n'existe pas encore, il est + * cree en utilisant la class<E>, sinon il est simplement caster vers cette + * classe. + * + * E peut prendre en argument du contruteur un objet de type ApplicationConfig + * + * @since 2.4.2 + */ + public <E> E getObject(Class<E> clazz, String name) { + E result = clazz.cast(context.get(name)); + if (result == null) { + result = ObjectUtil.newInstance( + clazz, Collections.singleton(this), true); + putObject(name, result); + } + return result; + } + + /** + * retourne une nouvelle instance d'un objet dont on recupere la la class + * dans la configuration via la cle 'key'. Retourne null si la cle n'est pas + * retrouve + * @since 2.4.2 + */ + public Object getOptionAsObject(String key) { + Object result = null; + if (hasOption(key)) { + Class<?> clazz = getOptionAsClass(key); + result = ObjectUtil.newInstance( + clazz, Collections.singleton(this), true); + } + return result; + } + + /** + * retourne une nouvelle instance d'un objet dont on recupere la la class + * dans la configuration via la cle 'key' et le cast en E. Retourne null + * si la cle n'est pas retrouve + * + * E peut prendre en argument du contruteur un objet de type ApplicationConfig + * + * @since 2.4.2 + */ + public <E> E getOptionAsObject(Class<E> clazz, String key) { + E result = clazz.cast(getOptionAsObject(key)); + return result; + } + + /** + * retourne l'objet instancier via la classe recupere dans la configuration + * via la cle 'key'. Une fois instancie, le meme objet est toujours retourne. + * On null si key n'est pas retrouve. + * + * La classe peut avoir un constructeur prenant un ApplicationConfig + * + * @since 2.4.2 + */ + public Object getOptionAsSingleton(String key) { + Object result = context.get(key); + if (result == null) { + result = getOptionAsObject(key); + putObject(key, result); + } + return result; + } + + /** + * retourne l'objet caster en 'E', instancier via la classe recupere dans la + * configuration via la cle 'key'. Une fois instancie, le meme objet est + * toujours retourne. On null si key n'est pas retrouve + * + * La classe peut avoir un constructeur prenant un ApplicationConfig + * + * @since 2.4.2 + */ + public <E> E getOptionAsSingleton(Class<E> clazz, String key) { + E result = clazz.cast(getOptionAsSingleton(key)); + return result; + } + + /** * Set option value. * * @param key property key
participants (1)
-
bpoussin@users.nuiton.org