Re: ERAttachment... to-many and thumbs
Re: ERAttachment... to-many and thumbs
- Subject: Re: ERAttachment... to-many and thumbs
- From: "Brook, James" <email@hidden>
- Date: Mon, 08 Aug 2011 13:06:58 +0200
- Acceptlanguage: en-US
- Thread-topic: ERAttachment... to-many and thumbs
This thread from the end of last year has just been really useful to me. I got my D2W application working with an entity that has a to-many relationship to image. Each related image is represented as separate entity as suggested. An 'image' uses the ERAttachment children relationship and the thumbnail string property on ERAttachment to provide several different thumbnail sizes for each image.
It strikes me that this is a good subject for a wiki page. It must be a really common use case. I would write it straight away but I feel that my rules are still a bit of a mess. The rules in the mail below don't quite seem to correspond with the example screenshots. It looks to me that the e-mail rules are written for a to-one relationship to photo and the screenshots have a to-many to photo. Is the example application still available somewhere please?
--
James
On 25 Nov 2010, at 01:04, David Holt wrote:
How does this look to you?
<SafariScreenSnapz025.png>
<SafariScreenSnapz024.png>
On 2010-11-24, at 12:35 PM, David Holt wrote:
Update:
For thumbnailing using ImageMagick downloaded using macports and the code below works great.
er.attachment.thumbnail.imageProcessor=imagemagick
er.attachment.ImageProcessor.imageMagickBinFolder=/opt/local/bin
David
On 2010-11-24, at 9:50 AM, David Holt wrote:
Hi Francesco,
On 2010-11-24, at 2:57 AM, Denis Frolov wrote:
The problem is that you have a relationship to the abstract
ERAttachment entity. I see two possible solutions:
1. Make a relationship to specific sub-entity of ERAttachment (e.g.
ERFileAttachment). I haven't done this personally, but this should
solve your problem.
I think using an intermediate entity might be a more transparent way to keep track of the to-many relationship.
Product ->> Photo -> ERAttachment
Then you can display your list and don't have to worry about what attachment type you are dealing with.
Also, I tried my hand at creating thumbnails on the fly using ERAttachment framework and didn't have much success. At this point, to control the number of variables you are juggling in this learning process, you might want to consider creating the thumbnails separately (outside the app) and uploading them separately (i.e. a relationship to the photos + a relationship to the thumbnail you wish to use for the Product).
I created a project to answer your question yesterday with a Person -> ERAttachment relationship for photo. I used the setPhoto() method on Person to create a thumbnail (which I haven't been able to get working quite yet).
@Override
public void setPhoto(ERAttachment value) {
// TODO Auto-generated method stub
super.setPhoto(value);
if (value != null) {
try {
File inputFile = new File(((ERFileAttachment) photo()).filesystemPath());
File outputFile = File.createTempFile("erattachment-thumb-", photo().originalFileName());
ERImageProcessor.imageProcessor().thumbnail(50, 50, inputFile, outputFile);
ERAttachment attachment = ERAttachmentProcessor.processorForType(photo().storageType()).process(photo().editingContext(), outputFile);
photo().addToChildrenAttachments(attachment);
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public ERAttachment small() {
return photo().childrenAttachments().objectAtIndex(0);
}
Properties:
er.attachment.Person.photo.storageType = file
er.attachment.Person.photo.file.overwrite = false
er.attachment.Person.photo.file.filesystemPath = /tmp/erattachment
er.attachment.thumbnail.imageProcessor=sips
er.attachment.file.filesystemPath = /tmp
These are the rules I needed to make it go:
Rules for Creation/Inspection/Editing
100 : ((pageConfiguration = 'EditPerson' or pageConfiguration = 'CreatePerson') and propertyKey = 'photo') => attachmentConfigurationName = "Person.photo" [com.webobjects.directtoweb.Assignment]
100 : ((pageConfiguration = 'EditPerson' or pageConfiguration = 'CreatePerson') and propertyKey = 'photo') => componentName = "ERMD2WEditAttachment" [com.webobjects.directtoweb.Assignment]
100 : (pageConfiguration = 'InspectPerson' and propertyKey = 'photo') => componentName = "ERD2WDisplayImageAttachment" [com.webobjects.directtoweb.Assignment]
100 : pageConfiguration = 'CreatePerson' => displayPropertyKeys = ("firstName", "lastName", "photo") [com.webobjects.directtoweb.Assignment]
100 : pageConfiguration = 'CreatePerson' => formEncoding = "multipart/form-data" [com.webobjects.directtoweb.Assignment]
Rules for List
100 : pageConfiguration = 'ListPerson' => displayPropertyKeys = ("firstName", "lastName", "small") [com.webobjects.directtoweb.Assignment]
100 : (pageConfiguration = 'ListPerson' and propertyKey = 'small') => componentName = "ERD2WDisplayImageAttachment" [com.webobjects.directtoweb.Assignment]
You'll need to copy ERD2WDisplayImageAttachment out of ERDivaLiteLook into your application so that it is accessible. Initially I tried to include ERDivaLiteLook in the build path and its rules overwrote some of the page template behaviour in ModernLook.
I will try and get thumbnailing working in the next day or two. But I hope that this helps somewhat in the meantime.
David
2. Add support for getting "destinationEntityName" from rules before
trying the relationship entity in this method of
ERMODEditRelationshipPage:
public WOComponent newObjectAction() {
EOEditingContext newEc =
ERXEC.newEditingContext(masterObject().editingContext());
EOClassDescription relatedObjectClassDescription =
masterObject().classDescriptionForDestinationKey(relationshipKey());
EOEnterpriseObject relatedObject =
(EOEnterpriseObject)EOUtilities.createAndInsertInstance(newEc,
relatedObjectClassDescription.entityName());
The problem is that ERMODEditRelationshipPage doesn't know anything
about attachments and cannot figure our which concrete sub-entity of
ERAttachment to use.
Denis
On Tue, Nov 23, 2010 at 6:51 PM, Francesco Romano
<email@hidden<mailto:email@hidden>> wrote:
Francesco
On 23/nov/2010, at 14.43, Denis Frolov wrote:
On Tue, Nov 23, 2010 at 3:06 PM, Francesco Romano
<email@hidden<mailto:email@hidden>> wrote:
On 23/nov/2010, at 12.30, Denis Frolov wrote:
I think ERAttachmentViewer doesn't resize the image itself - it just passes
the width/height to WOImage. So, this approach is indeed "heavy". You can
create thumbnails upon upload and add them to "childrenAttachments"
relationship. After that you can show the thumbnail by accessing it via
"childrenAttachments" relationship on your list pages (you can add a cover
method for thumbnail to Product.java).
So I have to create the thumb...
How can I manage the upload?
Not sure, what you mean here, but the idea is to create a thumbnail
and then save it as child ERAttachment of this attachment.
Now I override willUpdate and willInsert in ProductERAttachment entity.
@Override
public void willInsert() {
this.updateThumbnail();
super.willInsert();
}
@Override
public void willUpdate() {
this.updateThumbnail();
super.willUpdate();
}
private void updateThumbnail() {
ERImageProcessor.imageProcessor().thumbnail(40, 40, inputFile, outputFile);
}
But... what about inputFile? How can I retrieve it from the ERAttachment
object?
new File(((ERFileAttachment) attachment()).filesystemPath())
I have not tried yet my code, because of the exception, but i wrote this:
File inputFile = new
File(((ERFileAttachment)erAttachment()).filesystemPath());
File outputFile = null;
try {
outputFile = File.createTempFile("erattachment-thumb",
inputFile.getName().substring(inputFile.getName().lastIndexOf('.')));
ERImageProcessor.imageProcessor().thumbnail(40, 40, inputFile, outputFile);
ERAttachment attachment =
ERAttachmentProcessor.processorForType(erAttachment().storageType()).process(erAttachment().editingContext(),
outputFile);
NSArray<ERAttachment> children = erAttachment().childrenAttachments();
if (children.count() > 0)
erAttachment().deleteAllChildrenAttachmentsRelationships();
attachment.setThumbnail("40x40");
erAttachment().addToChildrenAttachmentsRelationship(attachment);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
To fix the exception try adding the rule like this:
entity.name<http://entity.name/> = 'Product' and task = 'edit' and propertyKey = 'photos'
=> destinationEntityName = 'ERFileAttachment'
It doesn't fix the problem...This is strange... in a previous test (some
days ago) I did not have this error... just the form encryption exception...
What's the full stack trace?
Nov 23 16:34:14 PNStoreAdmin[5100] WARN NSLog -
<er.ajax.AjaxRequestHandler>: Exception occurred while handling request:
com.webobjects.foundation.NSForwardException
[java.lang.InstantiationException] null:<er.attachment.model.ERAttachment>
is an abstract class. It can not be instantiated !
[2010-11-23 16:34:14 CET] <WorkerThread10>
com.webobjects.foundation.NSForwardException
[java.lang.InstantiationException] null:<er.attachment.model.ERAttachment>
is an abstract class. It can not be instantiated !
at
com.webobjects.foundation._NSUtilities._explainInstantiationException(_NSUtilities.java:616)
at
com.webobjects.foundation._NSUtilities.instantiateObjectWithConstructor(_NSUtilities.java:665)
at
com.webobjects.eoaccess.EOEntityClassDescription.createInstanceWithEditingContext(EOEntityClassDescription.java:242)
at
er.extensions.eof.ERXEntityClassDescription.createInstanceWithEditingContext(ERXEntityClassDescription.java:739)
at
com.webobjects.eoaccess.EOUtilities.createAndInsertInstance(EOUtilities.java:861)
at
er.modern.look.pages.ERMODEditRelationshipPage.newObjectAction(ERMODEditRelationshipPage.java:102)
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 er.ajax.AjaxUtils.valueForBinding(AjaxUtils.java:310)
at er.ajax.AjaxDynamicElement.valueForBinding(AjaxDynamicElement.java:45)
at er.ajax.AjaxUpdateLink.handleRequest(AjaxUpdateLink.java:383)
at er.ajax.AjaxDynamicElement.invokeAction(AjaxDynamicElement.java:87)
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.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:102)
at
er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:60)
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.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.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.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
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:102)
at
er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:60)
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:98)
at er.ajax.AjaxUpdateContainer.invokeAction(AjaxUpdateContainer.java:80)
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:102)
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.WOComponent.invokeAction(WOComponent.java:1079)
at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:102)
at
er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:60)
at
com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
at
er.extensions.components._private.ERXSwitchComponent.invokeAction(ERXSwitchComponent.java:117)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
at er.directtoweb.pages.ERD2WPage.invokeAction(ERD2WPage.java:625)
at
com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
at
er.extensions.components._private.ERXSwitchComponent.invokeAction(ERXSwitchComponent.java:117)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
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
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:98)
at er.ajax.AjaxUpdateContainer.invokeAction(AjaxUpdateContainer.java:80)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:102)
at
er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:60)
at
com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
at
er.extensions.components._private.ERXSwitchComponent.invokeAction(ERXSwitchComponent.java:117)
at
com.webobjects.appserver._private.WOComponentContent.invokeAction(WOComponentContent.java:38)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
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.WOGenericContainer.invokeAction(WOGenericContainer.java:29)
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
er.extensions.components._private.ERXWORepetition.invokeAction(ERXWORepetition.java:496)
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
er.extensions.components._private.ERXWORepetition.invokeAction(ERXWORepetition.java:496)
at
com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
at
com.webobjects.appserver._private.WOGenericContainer.invokeAction(WOGenericContainer.java:29)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:102)
at
er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:60)
at
com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
at
er.extensions.components._private.ERXSwitchComponent.invokeAction(ERXSwitchComponent.java:117)
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.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:219)
at
com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
at
er.extensions.components.conditionals.ERXWOConditional.invokeChildrenAction(ERXWOConditional.java:113)
at
com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
at
er.extensions.components.conditionals.ERXWOConditional.invokeAction(ERXWOConditional.java:104)
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:102)
at
er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:60)
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:98)
at er.ajax.AjaxUpdateContainer.invokeAction(AjaxUpdateContainer.java:80)
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:102)
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:102)
at
com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
at
er.extensions.components._private.ERXSwitchComponent.invokeAction(ERXSwitchComponent.java:117)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
at er.directtoweb.pages.ERD2WPage.invokeAction(ERD2WPage.java:625)
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:93)
at
er.extensions.appserver.ERXApplication.invokeAction(ERXApplication.java:1863)
at
com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedPage(WOComponentRequestHandler.java:206)
at
com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedSession(WOComponentRequestHandler.java:298)
at
com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedApplication(WOComponentRequestHandler.java:332)
at
com.webobjects.appserver._private.WOComponentRequestHandler._handleRequest(WOComponentRequestHandler.java:369)
at
com.webobjects.appserver._private.WOComponentRequestHandler.handleRequest(WOComponentRequestHandler.java:442)
at er.ajax.AjaxRequestHandler.handleRequest(AjaxRequestHandler.java:17)
at
com.webobjects.appserver.WOApplication.dispatchRequest(WOApplication.java:1687)
at
er.extensions.appserver.ERXApplication.dispatchRequestImmediately(ERXApplication.java:1978)
at
er.extensions.appserver.ERXApplication.dispatchRequest(ERXApplication.java:1943)
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)
Caused by: java.lang.InstantiationException
at
sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at
com.webobjects.foundation._NSUtilities.instantiateObjectWithConstructor(_NSUtilities.java:659)
... 180 more
Nov 23 16:34:14 PNStoreAdmin[5100] ERROR
er.extensions.appserver.ERXApplication - Exception caught:
<er.attachment.model.ERAttachment> is an abstract class. It can not be
instantiated !
Extra info: {
"D2W-SubTask" = "null";
"D2W-PageConfiguration" = "EditRelationshipEmbeddedERAttachment";
"CurrentComponent" = "er.coolcomponents.CCSmartAjaxButton";
"PreviousPageList" = (
"ListProduct",
"CreateProduct"
);
"D2W-PropertyKey" = "null";
"D2W-DisplayPropertyKeys" = (
"available",
"configurationName",
"creationDate",
"height",
"mimeType",
"originalFileName",
"ownerID",
"proxied",
"size",
"storageType",
"thumbnail",
"webPath",
"width"
);
"CurrentPage" = "er.modern.look.pages.ERMODWizardCreationPage";
"URL" =
"/cgi-bin/WebObjects/PNStoreAdmin.woa/ajax/L7OIB7bIogbcaIMUrHMdYw/5.0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0.1.0.0.0.1.2.3.1.0.3.3.5.1.5.1.2.1.1?_u=MUC_EditRelationshipEmbeddedERAttachment&1290526454890";
"CurrentComponentHierarchy" = (
"er.modern.look.pages.ERMODWizardCreationPage",
"er.modern.directtoweb.components.repetitions.ERMDInspectPageRepetition",
"er.modern.directtoweb.components.embedded.ERMDEditRelationship",
"er.modern.directtoweb.components.embedded.ERMD2WEditRelationship",
"er.directtoweb.components.ERD2WSwitchComponent",
"er.modern.look.pages.ERMODEditRelationshipPage",
"er.coolcomponents.CCSmartAjaxButton"
);
"D2W-EntityName" = "ERAttachment";
"D2W-ComponentName" = "ERD2WDisplayString";
"Session" = "<com.portonapoleone.store.admin.Session
sessionID=L7OIB7bIogbcaIMUrHMdYw timeOut(sec)=3600.0 terminating=false
_wasTimedOut=false contextArray=((\"0\"), (\"3\"), (\"2\"), (\"5\"))
contextPageInfos={0 = <com.webobjects.appserver._private.WOTransactionRecord
responsePage=<er.modern.look.pages.ERMODQueryEntitiesPage name:
er.modern.look.pages.ERMODQueryEntitiesPage subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.8.3.1.7 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.8.3.1.7.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.5.3.1.5 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.5.3.1.5.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.7.3.1.5 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.7.3.1.5.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.8.3.1.5 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.8.3.1.5.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.2.3.1.5 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.2.3.1.5.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.6.3.1.5 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.6.3.1.5.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >; 0 =
<com.portonapoleone.store.admin.ui.components.PageWrapper name:
com.portonapoleone.store.admin.ui.components.PageWrapper subcomponents:
{0.3.3 = <com.portonapoleone.store.admin.ui.components.MenuHeader name:
com.portonapoleone.store.admin.ui.components.MenuHeader subcomponents: null
; 0.1 = <er.directtoweb.components.ERD2WHead name:
er.directtoweb.components.ERD2WHead subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.1.3.1.7 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.1.3.1.7.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.4.3.1.5 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.4.3.1.5.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.0.3.1.5 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.0.3.1.5.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.1.3.1.5 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.1.3.1.5.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.0.3.1.7 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.0.3.1.7.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.3.3.1.5 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.3.3.1.5.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.2.3.1.7 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.2.3.1.7.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.3.3.1.7 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.3.3.1.7.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.4.3.1.7 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.4.3.1.7.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.5.3.1.7 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.5.3.1.7.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.6.3.1.7 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.6.3.1.7.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.7.3.1.7 =
<er.coolcomponents.CCSubmitLinkButton name:
er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.1.0.3.1.1.0.1.0.1.7.3.1.7.0 = <er.coolcomponents.CCSubmitLink
name: er.coolcomponents.CCSubmitLink subcomponents: null >; } >;
0.3.5.1.2.3.1.0.3.1.1.0.1 = <er.modern.look.components.ERMODSection name:
er.modern.look.components.ERMODSection subcomponents: null >; 0.3.5.1 =
<er.modern.look.components.ERMODRequiredWrapper name:
er.modern.look.components.ERMODRequiredWrapper subcomponents:
{0.3.5.1.2.3.1.0.1.1.1.0 =
<er.modern.directtoweb.components.header.ERMD2WSimpleHeader name:
er.modern.directtoweb.components.header.ERMD2WSimpleHeader subcomponents:
null >; 0.3.5.1.0 = <er.directtoweb.components.ERDDebuggingHelp name:
er.directtoweb.components.ERDDebuggingHelp subcomponents: null >; } >; } >
requestSignature=null.null>; 2 =
<com.webobjects.appserver._private.WOTransactionRecord
responsePage=<er.modern.look.pages.ERMODListPage name:
er.modern.look.pages.ERMODListPage subcomponents: {0 =
<com.portonapoleone.store.admin.ui.components.PageWrapper name:
com.portonapoleone.store.admin.ui.components.PageWrapper subcomponents:
{0.3.3 = <com.portonapoleone.store.admin.ui.components.MenuHeader name:
com.portonapoleone.store.admin.ui.components.MenuHeader subcomponents: null
; 0.1 = <er.directtoweb.components.ERD2WHead name:
er.directtoweb.components.ERD2WHead subcomponents: null >; } >;
0.3.5.1.2.3.0.1.0.0.3.5.1.3 =
<er.modern.look.components.ERMODSecondaryActionButtons name:
er.modern.look.components.ERMODSecondaryActionButtons subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.5.1.1.1 = <er.coolcomponents.CCSmartAjaxButton name:
er.coolcomponents.CCSmartAjaxButton subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.5.1.1.1.0.0 = <er.coolcomponents.CCSubmitLinkButton
name: er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.5.1.1.1.0.0.0 = <er.coolcomponents.CCSubmitLink name:
er.coolcomponents.CCSubmitLink subcomponents: null >; } >; } >; 0.3.5.1 =
<er.modern.look.components.ERMODRequiredWrapper name:
er.modern.look.components.ERMODRequiredWrapper subcomponents: {0.3.5.1.0 =
<er.directtoweb.components.ERDDebuggingHelp name:
er.directtoweb.components.ERDDebuggingHelp subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.1.1.1.0 =
<er.modern.directtoweb.components.header.ERMD2WSimpleHeader name:
er.modern.directtoweb.components.header.ERMD2WSimpleHeader subcomponents:
null >; } >; } > requestSignature=0.0.3.3.5.2.1.0.2.0.1.1.0.0>; 3 =
<com.webobjects.appserver._private.WOTransactionRecord
responsePage=<com.webobjects.woextensions.WOExceptionPage name:
com.webobjects.woextensions.WOExceptionPage subcomponents: {5 =
<com.webobjects.woextensions.WOCollapsibleComponentContent name:
com.webobjects.woextensions.WOCollapsibleComponentContent subcomponents:
null >; } > requestSignature=null.null>; 5 =
<com.webobjects.appserver._private.WOTransactionRecord
responsePage=<er.modern.look.pages.ERMODWizardCreationPage name:
er.modern.look.pages.ERMODWizardCreationPage subcomponents: {0 =
<com.portonapoleone.store.admin.ui.components.PageWrapper name:
com.portonapoleone.store.admin.ui.components.PageWrapper subcomponents:
{0.3.3 = <com.portonapoleone.store.admin.ui.components.MenuHeader name:
com.portonapoleone.store.admin.ui.components.MenuHeader subcomponents: null
; 0.1 = <er.directtoweb.components.ERD2WHead name:
er.directtoweb.components.ERD2WHead subcomponents: null >; } >;
0.3.5.1.2.3.0.1.0.0.3.3.1.1 = <er.coolcomponents.CCSmartAjaxButton name:
er.coolcomponents.CCSmartAjaxButton subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.3.1.1.0.0 = <er.coolcomponents.CCSubmitLinkButton
name: er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.3.1.1.0.0.0 = <er.coolcomponents.CCSubmitLink name:
er.coolcomponents.CCSubmitLink subcomponents: null >; } >; } >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0 =
<er.modern.directtoweb.components.repetitions.ERMDInspectPageRepetition
name: er.modern.directtoweb.components.repetitions.ERMDInspectPageRepetition
subcomponents: {0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.4.1.3.1 =
<com.webobjects.directtoweb.D2WEmptyWrapper name:
com.webobjects.directtoweb.D2WEmptyWrapper subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1 =
<com.webobjects.directtoweb.D2WEmptyWrapper name:
com.webobjects.directtoweb.D2WEmptyWrapper subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.6.1.3.1 =
<com.webobjects.directtoweb.D2WEmptyWrapper name:
com.webobjects.directtoweb.D2WEmptyWrapper subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0 =
<er.modern.directtoweb.components.embedded.ERMDEditRelationship name:
er.modern.directtoweb.components.embedded.ERMDEditRelationship
subcomponents: {0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0.1 =
<er.modern.directtoweb.components.embedded.ERMD2WEditRelationship name:
er.modern.directtoweb.components.embedded.ERMD2WEditRelationship
subcomponents: {0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0.1.0 =
<er.directtoweb.components.ERD2WSwitchComponent name:
er.directtoweb.components.ERD2WSwitchComponent subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0.1.0.0 =
<er.modern.look.pages.ERMODEditRelationshipPage name:
er.modern.look.pages.ERMODEditRelationshipPage subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0.1.0.0.0.1.2.3.1.0.3.3.5.1.5.1
= <er.coolcomponents.CCSmartAjaxButton name:
er.coolcomponents.CCSmartAjaxButton subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0.1.0.0.0.1.2.3.1.0.3.11 =
<er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent name:
er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent
subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0.1.0.0.0.1.2.3.1.0.3.1 =
<er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent name:
er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent
subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0.1.0.0.0.1.2.3.1.0.3.3.5.1.3 =
<er.coolcomponents.CCSmartAjaxButton name:
er.coolcomponents.CCSmartAjaxButton subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0.1.0.0.0.1 =
<er.modern.look.components.ERMODRequiredWrapper name:
er.modern.look.components.ERMODRequiredWrapper subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.5.1.3.1.0.1.0.0.0.1.0 =
<er.directtoweb.components.ERDDebuggingHelp name:
er.directtoweb.components.ERDDebuggingHelp subcomponents: null >; } >; } >;
} >; } >; } >; 0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.7.1.3.1 =
<com.webobjects.directtoweb.D2WEmptyWrapper name:
com.webobjects.directtoweb.D2WEmptyWrapper subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.3.1.3.1 =
<com.webobjects.directtoweb.D2WEmptyWrapper name:
com.webobjects.directtoweb.D2WEmptyWrapper subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1.0 =
<er.modern.directtoweb.components.embedded.ERMDEditRelationship name:
er.modern.directtoweb.components.embedded.ERMDEditRelationship
subcomponents: {0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1.0.1 =
<er.modern.directtoweb.components.embedded.ERMD2WEditRelationship name:
er.modern.directtoweb.components.embedded.ERMD2WEditRelationship
subcomponents: {0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1.0.1.0 =
<er.directtoweb.components.ERD2WSwitchComponent name:
er.directtoweb.components.ERD2WSwitchComponent subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1.0.1.0.0 =
<er.modern.look.pages.ERMODEditRelationshipPage name:
er.modern.look.pages.ERMODEditRelationshipPage subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1.0.1.0.0.0.1.2.3.1.0.3.1 =
<er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent name:
er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent
subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1.0.1.0.0.0.1.2.3.1.0.3.3.5.1.3 =
<er.coolcomponents.CCSmartAjaxButton name:
er.coolcomponents.CCSmartAjaxButton subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1.0.1.0.0.0.1 =
<er.modern.look.components.ERMODRequiredWrapper name:
er.modern.look.components.ERMODRequiredWrapper subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1.0.1.0.0.0.1.0 =
<er.directtoweb.components.ERDDebuggingHelp name:
er.directtoweb.components.ERDDebuggingHelp subcomponents: null >; } >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1.0.1.0.0.0.1.2.3.1.0.3.3.5.1.5.1
= <er.coolcomponents.CCSmartAjaxButton name:
er.coolcomponents.CCSmartAjaxButton subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1.0.1.0.0.0.1.2.3.1.0.3.11 =
<er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent name:
er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent
subcomponents: null >; } >; } >; } >; } >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.0.1.3.1 =
<com.webobjects.directtoweb.D2WEmptyWrapper name:
com.webobjects.directtoweb.D2WEmptyWrapper subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1 =
<com.webobjects.directtoweb.D2WEmptyWrapper name:
com.webobjects.directtoweb.D2WEmptyWrapper subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.2.1.3.1 =
<com.webobjects.directtoweb.D2WEmptyWrapper name:
com.webobjects.directtoweb.D2WEmptyWrapper subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1.0 =
<er.modern.directtoweb.components.embedded.ERMDEditRelationship name:
er.modern.directtoweb.components.embedded.ERMDEditRelationship
subcomponents: {0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1.0.1 =
<er.modern.directtoweb.components.embedded.ERMD2WEditRelationship name:
er.modern.directtoweb.components.embedded.ERMD2WEditRelationship
subcomponents: {0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1.0.1.0 =
<er.directtoweb.components.ERD2WSwitchComponent name:
er.directtoweb.components.ERD2WSwitchComponent subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1.0.1.0.0 =
<er.modern.look.pages.ERMODEditRelationshipPage name:
er.modern.look.pages.ERMODEditRelationshipPage subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1.0.1.0.0.0.1.2.3.1.0.3.11 =
<er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent name:
er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent
subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1.0.1.0.0.0.1.2.3.1.0.3.1 =
<er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent name:
er.directtoweb.components.ERD2WExtraDisplayPropertyKeysComponent
subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1.0.1.0.0.0.1.2.3.1.0.3.3.5.1.3 =
<er.coolcomponents.CCSmartAjaxButton name:
er.coolcomponents.CCSmartAjaxButton subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1.0.1.0.0.0.1 =
<er.modern.look.components.ERMODRequiredWrapper name:
er.modern.look.components.ERMODRequiredWrapper subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1.0.1.0.0.0.1.0 =
<er.directtoweb.components.ERDDebuggingHelp name:
er.directtoweb.components.ERDDebuggingHelp subcomponents: null >; } >;
0.3.5.1.2.3.0.1.0.0.3.1.5.0.1.0.1.3.1.1.3.1.0.1.0.0.0.1.2.3.1.0.3.3.5.1.5.1
= <er.coolcomponents.CCSmartAjaxButton name:
er.coolcomponents.CCSmartAjaxButton subcomponents: null >; } >; } >; } >; }
; } >; 0.3.5.1.2.3.0.1.0.0.3.3.7.1 = <er.coolcomponents.CCSmartAjaxButton
name: er.coolcomponents.CCSmartAjaxButton subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.3.7.1.0.0 = <er.coolcomponents.CCSubmitLinkButton
name: er.coolcomponents.CCSubmitLinkButton subcomponents:
{0.3.5.1.2.3.0.1.0.0.3.3.7.1.0.0.0 = <er.coolcomponents.CCSubmitLink name:
er.coolcomponents.CCSubmitLink subcomponents: null >; } >; } >;
0.3.5.1.2.3.0.1.0.0.3.1.3 = <er.modern.look.components.ERMODErrorBlock name:
er.modern.look.components.ERMODErrorBlock subcomponents: null >; 0.3.5.1 =
<er.modern.look.components.ERMODRequiredWrapper name:
er.modern.look.components.ERMODRequiredWrapper subcomponents: {0.3.5.1.0 =
<er.directtoweb.components.ERDDebuggingHelp name:
er.directtoweb.components.ERDDebuggingHelp subcomponents: null >;
0.3.5.1.2.3.0.1.0.0.1.1.1.0 =
<er.modern.directtoweb.components.header.ERMD2WSimpleHeader name:
er.modern.directtoweb.components.header.ERMD2WSimpleHeader subcomponents:
null >; } >; } > requestSignature=2.0.3.3.5.2.3.0.0.1.0.1.1.0.0>; }
languages=(\"English_US\", \"English\", \"Nonlocalized\")
componentState={NavigationState = \"Products.CreateProduct\"; }
currentContextID=6 distributionEnabled=false cookieRendezVousEnabled=false
URLRendezVousEnabled=tru localizer=<er.extensions.localization.ERXLocalizer
English> messageEncoding=<er.extensions.appserver.ERXMessageEncoding
encoding: UTF-8> browser=<er.extensions.appserver.ERXBasicBrowser
browserName: Safari, version: 533.19.4, mozillaVersion: 5.0, platform:
MacOS>>";
"Bundles" = {
"Ajax" = "5.0";
"JavaWebObjects" = "5.4.3";
"ERDirectToWeb" = "5.0";
"ERJars" = "5.0";
"JavaJDBCAdaptor" = "5.4.3";
"ERCoolComponents" = "5.0";
"JavaEOProject" = "5.4";
"JavaWOExtensions" = "5.0";
"JavaEOControl" = "5.4.2";
"ERModernDefaultSkin" = "5.0";
"WOOgnl" = "5.0";
"PNStoreAdmin" = "";
"JavaFoundation" = "5.4.3";
"ERExtensions" = "5.0";
"ERModernDirectToWeb" = "5.0";
"PostgresqlPlugIn" = "5.0";
"ERModernLook" = "5.0";
"ERPrototypes" = "5.0";
"JavaXML" = "5.4.2";
"ERAttachment" = "5.0";
"JavaDirectToWeb" = "5.4.3";
"WOLips" = "5.0";
"JavaEOAccess" = "5.4.3";
"JavaDTWGeneration" = "5.4";
};
"Headers" = {
"cache-control" = "max-age=0";
"user-agent" = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us)
AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4";
"x-prototype-version" = "1.6.1";
"accept-language" = "en-us";
"accept-encoding" = "gzip, deflate";
"original_context_id" = "5";
"x-requested-with" = "XMLHttpRequest";
"accept" = "text/javascript, text/html, application/xml, text/xml, */*";
"connection" = "keep-alive";
"referer" =
"http://192.168.1.87:5100/cgi-bin/WebObjects/PNStoreAdmin.woa/wo/L7OIB7bIogbcaIMUrHMdYw/2.0.3.3.5.2.3.0.0.1.0.1.1.0.0";
"host" = "192.168.1.87:5100";
};
}
InstantiationException
at
sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at
com.webobjects.foundation._NSUtilities.instantiateObjectWithConstructor(_NSUtilities.java:659)
at
com.webobjects.eoaccess.EOEntityClassDescription.createInstanceWithEditingContext(EOEntityClassDescription.java:242)
at
er.extensions.eof.ERXEntityClassDescription.createInstanceWithEditingContext(ERXEntityClassDescription.java:739)
at
com.webobjects.eoaccess.EOUtilities.createAndInsertInstance(EOUtilities.java:861)
at
er.modern.look.pages.ERMODEditRelationshipPage.newObjectAction(ERMODEditRelationshipPage.java:102)
... skipped 16 stack elements
at er.ajax.AjaxUpdateLink.handleRequest(AjaxUpdateLink.java:383)
... skipped 152 stack elements
at er.ajax.AjaxRequestHandler.handleRequest(AjaxRequestHandler.java:17)
... skipped 6 stack elements
ps: You can also prevent the error by making a relationship to
ERFileAttachment instead of ERAttachment.
IllegalArgumentException: This form is missing a
'enctype=multipart/form-data' attribute. It is required for WOFileUpload to
work.
at
er.extensions.components._private.ERXWOFileUpload.checkEnctype(ERXWOFileUpload.java:44)
... skipped 102 stack elements
If I enable this rule:
(task = 'edit' and entity.name<http://entity.name/> = 'Product' and propertyKey = 'photos')
=> componentName = "ERMD2WEditAttachment"
this is what happens:
ClassCastException: com.webobjects.eocontrol._EOCheapCopyMutableArray cannot
be cast to er.attachment.model.ERAttachment
at
er.attachment.components.ERAttachmentFlexibleEditor.viewerAttachment(ERAttachmentFlexibleEditor.java:275)
at
er.attachment.components.ERAttachmentFlexibleEditor.showUpload(ERAttachmentFlexibleEditor.java:202)
Which i expect, because photos should be a NSArray<ERAttachment>..
Denis
Francesco
Denis
On Tue, Nov 23, 2010 at 1:51 PM, Francesco Romano <email@hidden<mailto:email@hidden>>
wrote:
Some updates after some hours of work
Let's start with thumbnails.
First of all... if in the ERAttachmentViewer I bind either the width or
height, it resize correctly the picture.. now.. the question is can this
become "heavy"? I think I'll use the thumbs only in list pages..or is better
to create the thumb on insertion and simply display it later?
About D2W rule... if i use as a component ERDList, I don't have the new
button to add the image.
This is the entity I create:
<Screen shot 2010-11-23 at 11.45.07.png>
If I don't create any rule, this is what I see in the CreateProduct page:
<Screen shot 2010-11-23 at 11.47.16.png>
Then, if I press New:
Nov 23 11:47:47 PNStoreAdmin[5100] WARN NSLog -
<er.ajax.AjaxRequestHandler>: Exception occurred while handling request:
com.webobjects.foundation.NSForwardException
[java.lang.InstantiationException] null:<er.attachment.model.ERAttachment>
is an abstract class. It can not be instantiated !
[2010-11-23 11:47:47 CET] <WorkerThread3>
com.webobjects.foundation.NSForwardException
[java.lang.InstantiationException] null:<er.attachment.model.ERAttachment>
is an abstract class. It can not be instantiated !
at
com.webobjects.foundation._NSUtilities._explainInstantiationException(_NSUtilities.java:616)
at
com.webobjects.foundation._NSUtilities.instantiateObjectWithConstructor(_NSUtilities.java:665)
Francesco
On 23/nov/2010, at 08.48, Francesco Romano wrote:
Are you actually going to display multiple photos for a Product?
Or are you displaying ...
one thumbnail
or
one big photo
or
one medium photo
David
What I want is the possibility to have many photos for a product. And i
need one thumbnail (but I think I'll thumbnail every photos, otherwise it'l
become a bit complex to manage everything..).. So in the list page I display
the thumb, in the Inspect page I display all the photos (I don't know if
every photo in the same moment, or just a sort of embedded gallery in the
page with next and previous button..)
I'll try this morning creating a new project and a new db connection, to
not destroy my old one, until I find the right migration
On 23/nov/2010, at 06.41, Denis Frolov wrote:
On Mon, Nov 22, 2010 at 11:27 PM, Francesco Romano
<email@hidden<mailto:email@hidden>> wrote:
Ok.. I'll try this for the thumbnail..
About D2W...
I have something like
Product <-->> ERAttachment for a photos property.
But.. i watched the tutorial of David and he created a many-to-many, so
Product <-->> ProductPhotos <<--> ERAttachment
Product has a "photos" property (so a NSArray of ERAttachment).
But.. I don't know how to manage this with the rules, both on Inspect and
on Edit/Create configuration.
BTW: how can I select the first object of an array with a rule?
You could try "photos.@objectAtIndex.0" but I think a better way would
be to add a cover method "thumbnail" to your Product.java returning
the attachment you need and use it in rule.
What I want to do is:
In ListProduct configuration I want to display the thumbnail
Cover method above would help you with this.
I'll go for the cover method
In Edit/Create Product configuration I want to display all the photos in
"maximum" size (i don't know yet the size.. I'll decide later)
We use our own custom component for this, but I think you could use
ERDList or ERMDEditRelationship to display/edit the list of photos,
e.g.:
entity.name<http://entity.name/> = 'Product' and task = 'edit' and propertyKey = 'photos'
=> componentName = 'ERDList'
I think I already tried something like that and it didn't work.... I'll
try again..
Francesco
Denis
Thanks again for your answers
Francesco
On 22/nov/2010, at 21.05, Denis Frolov wrote:
Hi,
In fact, the support for thumbnails is already there in the model of
ERAttachment. Note the "parentAttachment"/"childrenAttachments"
relationships and "thumbnail" attribute. Just create a new
ERAttachment for thumbnail and add it to "childrenAttachments" of
original attachment. You can use "thumbnail" attribute to specify the
size of the thumbnail in case you need multiple thumbnails of
different sizes. We use strings like "200x150" for "thumbnail"
attribute.
As for the D2W, could you be more specific on what the problem is?
Denis
On Mon, Nov 22, 2010 at 7:49 PM, Francesco Romano
<email@hidden<mailto:email@hidden>> wrote:
Hi.
I have two questions about ERAttachment.
1) Thumbnails are not available, yet, but.. what do I have to do to add
support to them? I don't understand how to implement them "inside"
erattachment
2) I'd like to have a many-to-many relationship between my entity and
erattachment. I don't have problems in modeling, but.. how can I manage them
using D2W and rules? (I'm creating two apps: an admin app using D2W Modern
look, and a "front-end" app without D2W. I have problem in the D2W side...)
Thank for any help
Francesco Romano
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden<mailto:email@hidden>)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden<mailto:email@hidden>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden<mailto:email@hidden>)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden<mailto:email@hidden>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden<mailto:email@hidden>)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden<mailto:email@hidden>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden<mailto:email@hidden>)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden<mailto:email@hidden>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden<mailto:email@hidden>)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden<mailto:email@hidden>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden<mailto:email@hidden>)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden<mailto:email@hidden>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden<mailto:email@hidden>)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden<mailto:email@hidden>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden<mailto:email@hidden>)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden<mailto:email@hidden>
<ATT00001..txt>
_______________________________________________
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