It seems that the attachment gets stripped somewhere on the way so here
it goes again ...
<start code>
/*
* TestPortletEditController.java
*
* Created on February 20, 2007, 10:58 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package com.fmr.ficl.ats.portlet;
import java.util.Collection;
import java.util.Iterator;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletMode;
import javax.portlet.PortletPreferences;
import javax.portlet.PortletRequest;
import org.apache.jetspeed.CommonPortletServices;
import org.apache.jetspeed.PortalReservedParameters;
import org.apache.jetspeed.om.common.portlet.MutablePortletEntity;
import org.apache.jetspeed.om.page.ContentFragment;
import org.apache.jetspeed.prefs.NodeDoesNotExistException;
import org.apache.jetspeed.prefs.PreferencesProvider;
import org.apache.jetspeed.prefs.om.Node;
import org.apache.jetspeed.prefs.om.Property;
import org.apache.jetspeed.prefs.om.impl.PropertyImpl;
import org.springframework.validation.BindException;
import org.springframework.web.portlet.mvc.SimpleFormController;
import com.fmr.ficl.ats.portlet.command.DCLAssetDescriptor;
/**
*
* @author a122823
*/
public class TestPortletEditController extends SimpleFormController {
private PreferencesProvider prefProvider;
protected void onSubmitAction(ActionRequest request,
ActionResponse response, Object command, BindException
errors)
throws Exception {
DCLAssetDescriptor asset = (DCLAssetDescriptor) command;
if (asset.getContext() == null || asset.getContext().length() ==
0) {
errors.rejectValue("context", "error.context", "context is
missing");
return;
}
if (asset.getGlobal() != null &&
asset.getGlobal().booleanValue()) {
if (prefProvider == null) {
prefProvider = (PreferencesProvider) getPortletContext()
.getAttribute(
CommonPortletServices.CPS_PREFERENCES_PROVIDER);
}
String portletId = "P-1116fccba68-10000";
//TODO: make this work in action (works in render ..)
// ((ContentFragment) request
//
.getAttribute(PortalReservedParameters.FRAGMENT_ATTRIBUTE))
// .getId();
Node rootNode = null;
try {
rootNode = prefProvider.getNode("/"
+ MutablePortletEntity.PORTLET_ENTITY_ROOT + "/"
+ portletId + "/guest/preferences", 0);
} catch (NodeDoesNotExistException e) {
errors.reject(e.getMessage());
}
Node contextNode = null;
try {
contextNode = prefProvider.getNode("/"
+ MutablePortletEntity.PORTLET_ENTITY_ROOT + "/"
+ portletId + "/guest/preferences/context", 0);
} catch (NodeDoesNotExistException e) {
contextNode = prefProvider.createNode(rootNode,
"context", 0,
null);
prefProvider.storeNode(contextNode);
}
this.setValuesAndSize(contextNode, asset.getContext(),
portletId);
Node subContextNode = null;
try {
subContextNode = prefProvider.getNode("/"
+ MutablePortletEntity.PORTLET_ENTITY_ROOT + "/"
+ portletId + "/guest/preferences/subContext",
0);
} catch (NodeDoesNotExistException e) {
if (asset.getSubContext() != null
&& asset.getSubContext().length() > 0) {
subContextNode = prefProvider.createNode(rootNode,
"context", 0, null);
prefProvider.storeNode(subContextNode);
}
}
if (asset.getSubContext() != null
&& asset.getSubContext().length() > 0) {
this.setValuesAndSize(subContextNode,
asset.getSubContext(), portletId);
} else {
if (subContextNode != null) {
prefProvider.removeNode(rootNode, subContextNode);
}
}
} else {
PortletPreferences prefs = request.getPreferences();
prefs.setValue("context", asset.getContext());
if (asset.getSubContext() != null
&& asset.getSubContext().length() > 0) {
prefs.setValue("subContext", asset.getSubContext());
} else {
prefs.reset("subContext");
}
prefs.store();
}
response.setPortletMode(PortletMode.VIEW);
} // end of onSubmitAction method
protected Object formBackingObject(PortletRequest request) throws
Exception {
DCLAssetDescriptor asset = new DCLAssetDescriptor();
PortletPreferences prefs = request.getPreferences();
asset.setContext(prefs.getValue("context", ""));
asset.setSubContext(prefs.getValue("subContext", ""));
return asset;
} // end of formBackingObject method
private void setValuesAndSize(Node zeNode, Object zeValue, String
portletId) throws Exception {
Node valuesNode = null;
try {
valuesNode = prefProvider.getNode("/"
+ MutablePortletEntity.PORTLET_ENTITY_ROOT + "/"
+ portletId + "/guest/preferences/" +
zeNode.getNodeName() + "/values", 0);
} catch (NodeDoesNotExistException e) {
valuesNode = prefProvider.createNode(zeNode,
"values", 0, null);
prefProvider.storeNode(valuesNode);
}
// update/create properties for node
Property valueProperty = null;
Collection valuesProps = valuesNode.getNodeProperties();
for (Iterator iter = valuesProps.iterator(); iter.hasNext();) {
// we're making the assumption there is never more than one
here
valueProperty = (Property) iter.next();
}
// nothing there?
if (valueProperty == null) {
// create one
valueProperty = new PropertyImpl(valuesNode.getNodeId(),
"0", zeValue);
} else {
valueProperty.setPropertyValue(zeValue.toString());
}
valuesProps.clear();
valuesProps.add(valueProperty);
valuesNode.setNodeProperties(valuesProps);
prefProvider.storeNode(valuesNode); // XXX: This is where
exception occurs !!
Node contextSizeNode = null;
try {
contextSizeNode = prefProvider.getNode("/"
+ MutablePortletEntity.PORTLET_ENTITY_ROOT + "/"
+ portletId + "/guest/preferences/" +
zeNode.getNodeName() + "/values", 0);
} catch (NodeDoesNotExistException e) {
contextSizeNode = prefProvider.createNode(zeNode, "size",
0, null);
prefProvider.storeNode(contextSizeNode);
}
// create properties for node if needed
Property sizeProperty = null;
Collection sizeProps = contextSizeNode.getNodeProperties();
for (Iterator iter = sizeProps.iterator(); iter.hasNext();) {
// there should be only one of this
sizeProperty = (Property) iter.next();
}
// check if we have it
if (sizeProperty == null) {
sizeProperty = new PropertyImpl(contextSizeNode.getNodeId(),
"size", new Integer(1));
} else {
sizeProperty.setPropertyValue("1");
}
sizeProps.clear();
sizeProps.add(sizeProperty);
contextSizeNode.setNodeProperties(sizeProps);
prefProvider.storeNode(contextSizeNode);
return;
} // end of setValuesAndSize method
}
</end code>
Thanks, Joris.
-----Original Message-----
From: David Sean Taylor [mailto:[EMAIL PROTECTED]
Sent: Thursday, March 29, 2007 12:54 PM
To: Jetspeed Users List
Subject: Re: PreferencesProvider question
On Mar 28, 2007, at 10:16 AM, Melchior, Joris wrote:
> Hi everyone,
>
> I'm using the PreferencesProvider to manipulate some preferences.
> When I
> add properties to a node and then try to store the node I get the
> following exception. I've tried not setting the nodeId on the Property
> but it yields the same error.
>
> Nested Exception is
> org.springmodules.orm.ojb.OjbOperationException: OJB
> operation failed; nested exception is
> org.apache.ojb.broker.metadata.MetadataException: IllegalAccess error
> setting field:nodeId in
> object:org.apache.jetspeed.prefs.om.impl.PropertyImpl
> Caused by: org.apache.ojb.broker.metadata.MetadataException:
> IllegalAccess error setting field:nodeId in
> object:org.apache.jetspeed.prefs.om.impl.PropertyImpl
>
> Any suggestions as to what might cause that error?
>
Be best of you sent the code snippet and I can have a look at it
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]