hello Jan I got it right, thanks again. I have learned that the NodeData Entity usually wraps a single jcr propety, except when it is created with PropertyType.BINARY. In that case it actually wraps a whole node, and you can set properties on this node using the setAttribute() methods (only string and Calendar values are supported). This is a bit unexpected, but non the less good to know.
Also: your assumption that jcr:xx should not be set directly is not true. if you look a bit farther into the code sample you send me you find: this.fileNode.setAttribute(FileProperties.PROPERTY_CONTENTTYPE, mimetype); Where FileProperties.PROPERTY_CONTENTTYPE resolves to 'jcr:mimeType'. so, no sweat there. regards, Ernst 2009/10/23 Jan Haderka <[email protected]>: > > As far as I can tell, you are not doing exactly the same things as for > example DMS is doing on file upload: > > // write file > this.fileNode = node.createNodeData("document", > javax.jcr.PropertyType.BINARY); > InputStream in = new FileInputStream(tmpFile); > this.fileNode.setValue(in); > IOUtils.closeQuietly(in); > > ... I don't think you should (or could) create any jcr:xxx properties > directly. > > Why can't you try to do the same as above - i.e. get the node and call > Magnolia API to store the binary data in it and let Magnolia handle all > the details of how it will be stored? If you really insist on saving > those binary data directly yourself, then look in the DefaultContent to > see how Magnolia calls JCR APIs to do so. > > HTH, > Jan > > > > > On Thu, 2009-10-22 at 11:57 +0200, Ernst Bunders wrote: >> Hello >> >> I'm new to Magnolia, but we are planning to build some websites with >> it in the future, and we are currently in the process of >> experimentation and discovery. The project I'm currently on is >> creating a magnolia importer that will have to create pages and >> paragraphs based on the content of existing websites we own. >> >> The problem I'm running into is creating images in the repository. At >> first glance it seems obvious enough: just create the node structure >> that the stkTextImage dialog creates. Unfortunately this seems not the >> case. In the below (groovy) code I am creating a paragraph node, and >> a child 'imageBinary' node. Some utility methods are called but not >> shown here. >> >> StkTextImage is a container for all repository paragraph properties >> StkImage is a container for all repository image properties. >> >> --- >> def createParagraph(Content parentNode, StkTextImage paragraph) { >> def paraCount = parentNode.children.size() >> def nodeName = ("00" + ++paraCount)[-2..-1] >> Content paragraphNode = createOrFindContentNode(parentNode, nodeName) >> createOrFindContentNode(paragraphNode, 'text_files') >> setDataWhenValue(paragraphNode, 'subtitle', paragraph.title) >> setDataWhenValue(paragraphNode, 'text', paragraph.textAsHtml) >> paragraphNode.metaData.setTemplate('stkTextImage') >> StkImage img = paragraph.image >> if (img) { >> if (img.type == 'dms') { >> //dms specific stuff >> setDataWhenValue(paragraphNode, 'imageDmsUUID', img.dmsUuid) >> } else if (img.type == 'upload') { >> //upload specific stuff >> imageNode = createOrFindResourceNode(paragraphNode, 'imageBinary') >> setDataWhenValue(imageNode, "extension", img.fileExtension) >> setDataWhenValue(imageNode, "fileName", >> "${img.fileName}-(${img.width}x${img.height})") >> setDataWhenValue(imageNode, "height", "$img.height") >> setDataWhenValue(imageNode, "width", "$img.width") >> setDataWhenValue(imageNode, "jcr:data", new >> ByteArrayInputStream(img.imageByteArray)) >> setDataWhenValue(imageNode, "size", "$img.sizeInBytes") >> setDataWhenValue(imageNode, "jcr:mimeType", 'image/jpeg') >> setData(imageNode, "jcr:lastModified", wrapInCalendar(new Date())) >> } >> //global stuff >> setDataWhenValue(paragraphNode, 'image', img.type) >> setDataWhenValue(paragraphNode, 'imageCaption', img.caption) >> setDataWhenValue(paragraphNode, 'imageCopyright', img.copyright) >> setDataWhenValue(paragraphNode, 'imageDescription', img.description) >> setDataWhenValue(paragraphNode, 'imageLocation', paragraph.imageLocation) >> } >> --- >> >> This doesn't work though. The error message: >> >> --- >> An error occurred while executing the script. Error message is no >> definition found in parent node's node type for new node: no matching >> child node definition found for {http://www.jcp.org/jcr/1.0}data >> --- >> >> I've been playing around with this code for a while, and tried all >> kinds of different approaches. But I guess I'm on the wrong track, and >> need some help. >> >> Can anybody give me any advice on this? >> >> I attach two files: >> - the complete listing >> - an xml export of the created Event page (without the image >> obviously, the paragraph is the first one in the 'main' node) >> >> >> thanks, >> >> >> -- >> Ernst bunders >> Developer VPRO >> >> ---------------------------------------------------------------- >> For list details see >> http://www.magnolia-cms.com/home/community/mailing-lists.html >> To unsubscribe, E-mail to: <[email protected]> >> ---------------------------------------------------------------- > > > ---------------------------------------------------------------- > For list details see > http://www.magnolia-cms.com/home/community/mailing-lists.html > To unsubscribe, E-mail to: <[email protected]> > ---------------------------------------------------------------- > > -- Ernst bunders Ontwikkelaar VPRO ---------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.html To unsubscribe, E-mail to: <[email protected]> ----------------------------------------------------------------
