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.  :-)



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/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to