Re: ideas to dupe an EO
Re: ideas to dupe an EO
- Subject: Re: ideas to dupe an EO
- From: Chuck Hill <email@hidden>
- Date: Mon, 18 Feb 2013 10:49:24 -0800
On 2013-02-18, at 5:53 AM, Theodore Petrosky wrote:
> could there be something wrong here:
>
> ERXCopyable.copyLogger.debug("Removing objects in to-many relationship " + relationshipName);
> for (ERXCopyable relatedObject : relatedObjects) {
> destination.removeObjectFromBothSidesOfRelationshipWithKey(relatedObject, relationshipName);
> if (relatedObject.isNewObject()) {
> editingContext.deleteObject(relatedObject);
> }
> }
It looks like someone "updated" the for loop and broke it. relatedObjects needs to be a copy of the relationship, not a reference to it.
Chuck
>
> at this point in the process I get:
>
> I do not understand the code that starts the for loop. from what to what?
>
> java.util.NoSuchElementException
>
> at com.webobjects.foundation.NSMutableArray$Itr.next(NSMutableArray.java:656)
> at er.extensions.eof.ERXCopyable$Utility.cleanRelationships(ERXCopyable.java:442)
> at er.extensions.eof.ERXCopyable$Utility.newInstance(ERXCopyable.java:856)
> at com.as.Model.ProjectWorkOrder.duplicate(ProjectWorkOrder.java:59)
> at com.as.Model.ProjectWorkOrder.duplicate(ProjectWorkOrder.java:1)
> at er.extensions.eof.ERXCopyable$DefaultImplementation.copy(ERXCopyable.java:309)
> at com.as.Model.ProjectWorkOrder.copy(ProjectWorkOrder.java:51)
> at com.as.Model.ProjectWorkOrder.copy(ProjectWorkOrder.java:45)
> at com.as.Model.ProjectWorkOrder.copy(ProjectWorkOrder.java:1)
> at Components.TPMODInspectPage.dupeAction(TPMODInspectPage.java:121)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at com.webobjects.foundation.NSKeyValueCoding$ValueAccessor$1.methodValue(NSKeyValueCoding.java:636)
> at com.webobjects.foundation.NSKeyValueCoding$_MethodBinding.valueInObject(NSKeyValueCoding.java:1134)
> at com.webobjects.foundation.NSKeyValueCoding$DefaultImplementation.valueForKey(NSKeyValueCoding.java:1324)
> at com.webobjects.appserver.WOComponent.valueForKey(WOComponent.java:1736)
> at com.webobjects.foundation.NSKeyValueCoding$Utility.valueForKey(NSKeyValueCoding.java:447)
> at com.webobjects.foundation.NSKeyValueCodingAdditions$DefaultImplementation.valueForKeyPath(NSKeyValueCodingAdditions.java:212)
> at com.webobjects.appserver.WOComponent.valueForKeyPath(WOComponent.java:1804)
> at com.webobjects.appserver._private.WOKeyValueAssociation.valueInComponent(WOKeyValueAssociation.java:50)
> at com.webobjects.appserver.WOComponent.valueForBinding(WOComponent.java:731)
> at com.webobjects.appserver._private.WOBindingNameAssociation.valueInComponent(WOBindingNameAssociation.java:44)
> at com.webobjects.appserver.WOComponent.valueForBinding(WOComponent.java:731)
> at com.webobjects.appserver._private.WOBindingNameAssociation.valueInComponent(WOBindingNameAssociation.java:44)
> at com.webobjects.appserver.WOComponent.valueForBinding(WOComponent.java:731)
> at com.webobjects.appserver._private.WOBindingNameAssociation.valueInComponent(WOBindingNameAssociation.java:44)
> at com.webobjects.appserver._private.WOGenericElement.invokeAction(WOGenericElement.java:137)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:86)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
> at er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:66)
> at er.coolcomponents.CCSubmitLink.invokeAction(CCSubmitLink.java:63)
> at com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
> at er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:66)
> at com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:86)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
> at er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:66)
> at com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:86)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:86)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WOGenericContainer.invokeAction(WOGenericContainer.java:29)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:86)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver._private.WOComponentContent.invokeAction(WOComponentContent.java:38)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver._private.WOComponentContent.invokeAction(WOComponentContent.java:38)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at er.extensions.components._private.ERXWOForm.invokeAction(ERXWOForm.java:218)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at er.extensions.components.conditionals.ERXWOConditional.invokeChildrenAction(ERXWOConditional.java:116)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at er.extensions.components.conditionals.ERXWOConditional.invokeAction(ERXWOConditional.java:108)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:86)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
> at er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:66)
> at com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at er.ajax.AjaxDynamicElement.invokeAction(AjaxDynamicElement.java:50)
> at er.ajax.AjaxUpdateContainer.invokeAction(AjaxUpdateContainer.java:83)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
> at com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver._private.WOComponentContent.invokeAction(WOComponentContent.java:38)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver._private.WOHTMLURLValuedElement.invokeAction(WOHTMLURLValuedElement.java:149)
> at com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
> at com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
> at com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
> at er.extensions.components._private.ERXSwitchComponent.invokeAction(ERXSwitchComponent.java:120)
> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
> at er.directtoweb.pages.ERD2WPage.invokeAction(ERD2WPage.java:747)
> at com.webobjects.appserver.WOSession.invokeAction(WOSession.java:1357)
> at com.webobjects.appserver.WOApplication.invokeAction(WOApplication.java:1745)
> at er.extensions.appserver.ajax.ERXAjaxApplication.invokeAction(ERXAjaxApplication.java:119)
> at er.extensions.appserver.ERXApplication.invokeAction(ERXApplication.java:1988)
> at er.extensions.appserver.ERXComponentRequestHandler._dispatchWithPreparedPage(ERXComponentRequestHandler.java:157)
> at er.extensions.appserver.ERXComponentRequestHandler._dispatchWithPreparedSession(ERXComponentRequestHandler.java:235)
> at er.extensions.appserver.ERXComponentRequestHandler._dispatchWithPreparedApplication(ERXComponentRequestHandler.java:268)
> at er.extensions.appserver.ERXComponentRequestHandler._handleRequest(ERXComponentRequestHandler.java:302)
> at er.extensions.appserver.ERXComponentRequestHandler.handleRequest(ERXComponentRequestHandler.java:378)
> at com.webobjects.appserver.WOApplication.dispatchRequest(WOApplication.java:1687)
> at er.extensions.appserver.ERXApplication.dispatchRequestImmediately(ERXApplication.java:2109)
> at er.extensions.appserver.ERXApplication.dispatchRequest(ERXApplication.java:2074)
> at com.webobjects.appserver._private.WOWorkerThread.runOnce(WOWorkerThread.java:144)
> at com.webobjects.appserver._private.WOWorkerThread.run(WOWorkerThread.java:226)
> at java.lang.Thread.run(Thread.java:680)
> --- On Fri, 2/15/13, David Avendasora <email@hidden> wrote:
>
>> From: David Avendasora <email@hidden>
>> Subject: Re: ideas to dupe an EO
>> To: "Theodore Petrosky" <email@hidden>
>> Cc: "WebObjects Development" <email@hidden>
>> Date: Friday, February 15, 2013, 3:52 PM
>> Hi Ted,
>>
>> On Feb 16, 2013, at 2:11 AM, Theodore Petrosky <email@hidden>
>> wrote:
>>
>>> @Override
>>> public Agenda
>> duplicate(NSMutableDictionary<EOGlobalID,
>> ERXCopyable<?>> copiedObjects) {
>>> Agenda duplicate =
>> ERXCopyable.Utility.modelCopy(copiedObjects, (Agenda)
>> this);
>>> return duplicate;
>>> }
>>
>> Whoops! My Javadoc has lead you astray. Change the
>> "modelCopy" call to "deepCopy". So:
>>
>> @Override
>> public Agenda
>> duplicate(NSMutableDictionary<EOGlobalID,
>> ERXCopyable<?>> copiedObjects) {
>> Agenda duplicate =
>> ERXCopyable.Utility.deepCopy(copiedObjects, (Agenda) this);
>> return duplicate;
>> }
>>
>> In order to use the "modelCopy" method, you need to add
>> entries Agenda's UserInfo dictionary in your EOModel which
>> I'm guessing you haven't done.
>>
>> Once you've done that, calling anInstanceOfAgenda.copy()
>> will create a new instance of Agenda EO in the same EC as
>> anInstanceOfAgenda and then copy all the attributes and
>> relationships from anInstanceOfAgenda to the new instance.
>> You then need to make all the related Entities implement
>> ERXCopyable as well.
>>
>> The deepCopy assumes that you want copies of all of Agenda's
>> related EOs also, which may or may not be true (probably
>> not). If it is not true, you will need to change the
>> duplicate method to do what is correct for Agenda and its
>> related EOs. If you have Practical WebObjects, read Chapter
>> 9, with special attention to the Tweaking the Copy Process
>> section on page 264.
>>
>> Basically, you are going to want to use some combination of
>> the various ERXCopyable.Utility.xxxxCopyRelationship methods
>> where xxxx could be reference, shallow or deep. See
>> the javadoc for an explanation of what each will do.
>>
>> I hope that helps you!
>>
>> Dave
>>
>>
>>>
>>> I am trying to add a method to my version of the
>> ERMODInspectPage that will create and save a new copy the
>> object().
>>>
>>> i'm stuck with the method that fires to duplicate the
>> EO. Could you point me to some code that actually copies?
>>>
>>> Ted
>>>
>>>
>>> --- On Fri, 2/15/13, David LeBer <email@hidden>
>> wrote:
>>>
>>>> From: David LeBer <email@hidden>
>>>> Subject: Re: ideas to dupe an EO
>>>> To: "Theodore Petrosky" <email@hidden>
>>>> Cc: "WebObjects Development" <email@hidden>
>>>> Date: Friday, February 15, 2013, 10:51 AM
>>>> You probably want ERXCopyable.
>>>>
>>>> http://www.mail-archive.com/email@hidden/msg52084.html
>>>>
>>>> D
>>>>
>>>> On 2013-02-15, at 10:42 AM, Theodore Petrosky
>> <email@hidden>
>>>> wrote:
>>>>
>>>>> I am looking for an idea on duping an EO. I've
>> thought
>>>> of putting a hyperlink on the listPage then I
>> thought of
>>>> putting a button on the editPage (i am toying with
>> that
>>>> now).
>>>>>
>>>>> I duped ERMODInspectPage and I added a button.
>> If I
>>>> create a localInstance in a new EC, how can I save
>> this
>>>> 'new' EO. it isn't a new EO yet just a duplicate in
>> a new
>>>> editing context. I am looking at
>> ERXEOControlUtilities to
>>>> see if there are any methods to create a new EO
>> from my old
>>>> one.
>>>>>
>>>>> but some pointing in the right direction would
>> be
>>>> appreciated.
>>>>>
>>>>> Ted
>>>>>
>> _______________________________________________
>>>>> Do not post admin requests to the list. They
>> will be
>>>> ignored.
>>>>> Webobjects-dev mailing list
>> (email@hidden)
>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>
>>>>> This email sent to email@hidden
>>>>
>>>>
>>>
>>>
>>
>>
>> —————————————————————————————
>> WebObjects - so easy that even Dave Avendasora can do
>> it!™
>> —————————————————————————————
>> David Avendasora
>> Senior Software Abuser
>> Kaiten, Inc.
>>
>>
>>
>>
>>
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
--
Chuck Hill Senior Consultant / VP Development
Practical WebObjects - for developers who want to increase their overall knowledge of WebObjects or who are trying to solve specific problems.
http://www.global-village.net/gvc/practical_webobjects
Global Village Consulting ranks 13th in 2012 in BIV's Top 100 Fastest Growing Companies in B.C!
Global Village Consulting ranks 76th in 24th annual PROFIT 200 ranking of Canada’s Fastest-Growing Companies by PROFIT Magazine!
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden