Oh... I just tried this with a Foo.java class: public static class Util extends ERXGenericRecordClazz<Foo> { } public static final Util util = new Util();
Then I can do stuff like this: Foo aFoo = Foo.util.objectWithPrimaryKeyValue(anEditingContext, 5); EOEntity entity = Foo.util.entity(); String entityName = Foo.util.entityName(); int count = Foo.util.objectCountWithQualifier(anEditingContext, aQualifier); NSArray<Foo> allFoos = Foo.util.allObjects(anEditingContext); ... I think I get it now. :-) And the utility methods are overridable because I can put my own implementation in the definition of my Util static inner class. I like util better than clazz. Thanks On Dec 15, 2010, at 5:51 PM, Ricardo J. Parada wrote: > > > I see that the root EOEnterpriseObjectClazz has a bunch of utility methods. > For example, createAndInsertObject(), allObjects(), objectFromRawRow(), > objectWithPrimaryKeyValue(), entityName(), entity(), > createFetchSpecification(), objectCountWithQualifier(), etc. > > And they are only defined once instead of each and every _Foo.java. > > > > > > On Dec 15, 2010, at 5:31 PM, David Holt wrote: > >> >> On 2010-12-15, at 1:43 PM, Ricardo J. Parada wrote: >> >>> Thanks David. >>> >>> I noticed those __Clazz classes are then declared in the EOs as "public >>> static class". I read the article below to figure what that meant. I'm >>> still learning java I guess :-) >>> >>> http://www.javaworld.com/javaworld/javaqa/2001-08/01-qa-0817-static.html?page=1 >>> >>> So I'm trying to put it together. My Foo.java would have a clazz static >>> variable referencing an instance of FooClazz. I can add methods to >>> FooClazz in my Foo.java. >>> So then FooClazz extends _FooClazz which could have some static methods. >>> >>> Are we saying that when I define my FooClazz methods I implement them by >>> calling _FooClazz static methods or I can rewrite (i.e. override) if needed? >>> >>> I think I'm getting there... I ought to try it I guess. :-) >> >> I think the key to the use of Clazz in EOs is this line from the article >> above: >> >> "Instead, instances of Justification act as constants that work with any >> instance of Text. That's why we can get away with declaring Justification >> static; it is independent of any specific Text instances." >> >> The methods inside whatever class (Clazz) you declare as static inside an EO >> should be independent of any specific instance. You can call something like >> People.clazz.currentUser located inside the Person class because it isn't >> dependent on an instance of the Person class. The "currentUser" should >> return the same result regardless of where you're calling the accessor from, >> whereas something like a fullName() method can't be in the static member >> class because it relies on a specific Person instance to be able to give you >> a result. >> >> If you look at Bug.java, you'll see the static BugClazz contains things like >> qualifiers, fetchSpecification and arrays of objects that shouldn't be >> dependent on a specific instance of Bug. >> >> That's my understanding from reading the above article and watching the >> errors that Eclipse gives me when I try to access a static method or >> variable incorrectly. >> >> HTH, >> >> David >> >> >>> >>> >>> >>> On Dec 14, 2010, at 5:57 PM, David Holt wrote: >>> >>>> >>>> On 2010-12-14, at 2:20 PM, Ricardo J. Parada wrote: >>>> >>>>> >>>>> I've always wondered what that clazz thingy is. I'm still not sure. I >>>>> read the javadoc on EOEnterpriseObjectClazz but still I don't quite get >>>>> it. >>>>> What is it? Maybe a little example will go a long way in understanding. >>>>> :-) >>>> >>>> Hi Ricardo, >>>> >>>> You're not alone :-) >>>> >>>> To date I've been following BugTracker as an example to let me integrate >>>> the pattern into my D2W applications to give me really fine control of >>>> what objects I'm displaying in lists. >>>> >>>> I'm probably not understanding all that the Clazz pattern adds to the mix, >>>> but using it has allowed me to start understanding Anjo's example >>>> BusinessLogic in BugTracker and use the patterns I've found in my own >>>> code, and I know that it has improved my D2W applications considerably. >>>> >>>> Here is an example I use inside DocumentClazz >>>> >>>> // Class methods go here >>>> public static class DocumentClazz extends _Document._DocumentClazz { >>>> >>>> public EOFetchSpecification >>>> fetchSpecificationForWorkingGroupDocumentsForDeletion(WorkingGroup wg) { >>>> // selected working group, marked for Deletion >>>> EOFetchSpecification fs = >>>> Document.fetchSpec().qualify(Document.WORKING_GROUP.eq(wg).and(Document.IS_FOR_DELETION.eq(true))); >>>> return fs; >>>> } >>>> } >>>> >>>> Now when I need to get a list of documents from an action triggered from a >>>> navigation tab in my application I can use a method such as: >>>> >>>> // DELETION TAB >>>> public WOComponent listDocumentsForDeletion() { >>>> EOEditingContext ec = ERXEC.newEditingContext(); >>>> ec.lock(); >>>> WorkingGroup selectedWG = (WorkingGroup) WorkingGroup.wg(ec); >>>> try { >>>> EODatabaseDataSource ds = Document.clazz.newDatabaseDataSource(ec); >>>> EOFetchSpecification fs = >>>> Document.clazz.fetchSpecificationForWorkingGroupDocumentsForDeletion(selectedWG); >>>> ds.setFetchSpecification(fs); >>>> return (WOComponent) listPageNamed("ListDocumentsForDeletion", ds); >>>> } >>>> finally { >>>> ec.unlock(); >>>> } >>>> >>>> } >>>> >>>> David >>>> >>>> >>>>> >>>>> >>>>> On Dec 14, 2010, at 5:15 PM, David Holt wrote: >>>>> >>>>>> Hi Anjo, >>>>>> >>>>>> On 2010-12-14, at 1:34 PM, Anjo Krank wrote: >>>>>> >>>>>>> There is a reason why stuff in BT is done as it is. >>>>>>> >>>>>>> I.e. there is a People.class.setCurrentUser(People user) and >>>>>>> People.class.currentUser(EOEditingContext ec). Basically it puts all >>>>>>> the thread storage code (including the key) in People, which is, like, >>>>>>> good style? >>>>>> >>>>>> Absolutely agree. But it was difficult for me to wrap my head around >>>>>> ERXThreadStorage AND Clazz pattern AND ERCoreBusinessLogic at the same >>>>>> time. I was just trying to simplify it a little for Jesse. There is no >>>>>> question that all three together are much more powerful and useful. >>>>>> >>>>>>> >>>>>>> Also, ERXThreadStorage already handles EOs and faulting. >>>>>> >>>>>> >>>>>> Thanks, >>>>>> >>>>>> David >>>>>> >>>>>>> >>>>>>> Cheers, Anjo >>>>>>> >>>>>>> >>>>>>> >>>>>>> Am 14.12.2010 um 21:57 schrieb David Holt: >>>>>>> >>>>>>>> public static Person currentUser(EOEditingContext ec) { >>>>>>>> Person currentUser = currentUser(); >>>>>>>> if (currentUser != null && currentUser.editingContext() >>>>>>>> != ec) { >>>>>>>> EOEditingContext currentUserEc = >>>>>>>> currentUser.editingContext(); >>>>>>>> currentUserEc.lock(); >>>>>>>> try { >>>>>>>> Person localUser = (Person) >>>>>>>> ERXEOControlUtilities >>>>>>>> >>>>>>>> .localInstanceOfObject(ec, currentUser); >>>>>>>> currentUser = localUser; >>>>>>>> } finally { >>>>>>>> currentUserEc.unlock(); >>>>>>>> } >>>>>>>> } >>>>>>>> return currentUser; >>>>>>>> } >>>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Do not post admin requests to the list. They will be ignored. >>>>>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) >>>>>>> Help/Unsubscribe/Update your Subscription: >>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/programmingosx%40mac.com >>>>>>> >>>>>>> This email sent to programming...@mac.com >>>>>> >>>>>> _______________________________________________ >>>>>> Do not post admin requests to the list. They will be ignored. >>>>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) >>>>>> Help/Unsubscribe/Update your Subscription: >>>>>> http://lists.apple.com/mailman/options/webobjects-dev/rparada%40mac.com >>>>>> >>>>>> This email sent to rpar...@mac.com >>>>> >>>> >>> >> > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/webobjects-dev/rparada%40mac.com > > This email sent to rpar...@mac.com
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com