I linked to the templates earlier in the thread.

On 2010-12-17, at 11:24 AM, Jesse Tayler wrote:

> What template are you generating your EOs from?
> 
> I'm using _WonderEntity and I don't see clazz stuff in my _Classes
> 
> I look at BugTracker's eogen and I see it using _Entity from CorBusiness but 
> that template seems to be a regular old EO template.
> 
> 
> 
> 
> 
> On Dec 16, 2010, at 9:25 AM, Ricardo J. Parada wrote:
> 
>> 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      ([email protected])
>>>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/programmingosx%40mac.com
>>>>>>>>> 
>>>>>>>>> This email sent to [email protected]
>>>>>>>> 
>>>>>>>> _______________________________________________
>>>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>>>> Webobjects-dev mailing list      ([email protected])
>>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/rparada%40mac.com
>>>>>>>> 
>>>>>>>> This email sent to [email protected]
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list      ([email protected])
>>> Help/Unsubscribe/Update your Subscription:
>>> http://lists.apple.com/mailman/options/webobjects-dev/rparada%40mac.com
>>> 
>>> This email sent to [email protected]
>> 
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>> http://lists.apple.com/mailman/options/webobjects-dev/jtayler%40oeinc.com
>> 
>> This email sent to [email protected]
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/webobjects-dev/programmingosx%40mac.com
> 
> This email sent to [email protected]

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to