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]

Reply via email to