From: Jonathan B. L. <le...@us...> - 2006-09-12 23:47:15
|
Update of /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv25199 Modified Files: Tag: Wonder_2_0_0_Branch EOEnterpriseObjectClazz.java Log Message: merging my clazz factory to 2_0_0 branch Index: EOEnterpriseObjectClazz.java =================================================================== RCS file: /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/EOEnterpriseObjectClazz.java,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** EOEnterpriseObjectClazz.java 2 Feb 2004 12:44:47 -0000 1.2 --- EOEnterpriseObjectClazz.java 12 Sep 2006 23:47:11 -0000 1.2.2.1 *************** *** 92,121 **** /** - * Creates a clazz object for a given entity. - * Will look for a clazz object with the name: - * <entity name>$<entity name>Clazz. - * @param entity to generate the clazz for - * @return clazz object for the given entity - */ - private static EOEnterpriseObjectClazz classFromEntity(EOEntity entity) { - EOEnterpriseObjectClazz clazz = null; - if(entity == null) { - return new EOEnterpriseObjectClazz(); - } - try { - String className = entity.className(); - if(className.equals("ERXGenericRecord")) - clazz = new ERXGenericRecord.ERXGenericRecordClazz(); - else - clazz = (EOEnterpriseObjectClazz)Class.forName(className + "$" + entity.name() + "Clazz").newInstance(); - } catch (InstantiationException ex) { - } catch (ClassNotFoundException ex) { - } catch (IllegalAccessException ex) { - } - if(clazz == null) return classFromEntity(entity.parentEntity()); - return clazz; - } - - /** * Method used to get a clazz object for a given entity name. * This method will cache the generated clazz object so that --- 92,95 ---- *************** *** 127,132 **** EOEnterpriseObjectClazz clazz = (EOEnterpriseObjectClazz)allClazzes.objectForKey(entityName); if(clazz == null) { ! clazz = classFromEntity(ERXEOAccessUtilities.entityNamed(null, entityName)); ! clazz.setEntityName(entityName); allClazzes.setObjectForKey(clazz,entityName); } --- 101,105 ---- EOEnterpriseObjectClazz clazz = (EOEnterpriseObjectClazz)allClazzes.objectForKey(entityName); if(clazz == null) { ! clazz = factory().classFromEntity(ERXEOAccessUtilities.entityNamed(null, entityName)); allClazzes.setObjectForKey(clazz,entityName); } *************** *** 486,488 **** --- 459,528 ---- return faultsFromRawRows(ec, nsarray); } + + /** + * Provides a hook to control how a clazz object is chosen from a given entity. + */ + public static interface ClazzFactory { + public EOEnterpriseObjectClazz classFromEntity(EOEntity entity); + + } + + private static ClazzFactory _factory = new DefaultClazzFactory(); + + public static ClazzFactory factory() { return _factory; } + public static void setFactory(ClazzFactory value) { _factory = value; } + + /** + * Default factory implementation. + * @author ak + * + */ + public static class DefaultClazzFactory implements ClazzFactory { + + protected boolean classNameIsGenericRecord(final String className) { + return className.equals("ERXGenericRecord"); + } + + protected EOEnterpriseObjectClazz newInstanceOfDefaultClazz() { + return new EOEnterpriseObjectClazz(); + } + + protected EOEnterpriseObjectClazz newInstanceOfGenericRecordClazz() { + return new ERXGenericRecord.ERXGenericRecordClazz(); + } + + protected String clazzNameForEntity(EOEntity entity) { + return entity.className() + "$" + entity.name() + "Clazz"; + } + + /** + * Creates a clazz object for a given entity. + * Will look for a clazz object with the name: + * <entity name>$<entity name>Clazz. + * @param entity to generate the clazz for + * @return clazz object for the given entity + */ + public EOEnterpriseObjectClazz classFromEntity(EOEntity entity) { + EOEnterpriseObjectClazz clazz = null; + if(entity == null) { + clazz = newInstanceOfDefaultClazz(); + } else { + try { + String className = entity.className(); + if(classNameIsGenericRecord(className)) { + clazz = newInstanceOfGenericRecordClazz(); + } else { + String clazzName = clazzNameForEntity(entity); + clazz = (EOEnterpriseObjectClazz)Class.forName(clazzName).newInstance(); + } + } catch (InstantiationException ex) { + } catch (ClassNotFoundException ex) { + } catch (IllegalAccessException ex) { + } + } + if(clazz == null) return classFromEntity(entity.parentEntity()); + clazz.setEntityName(entity.name()); + return clazz; + } + } } |