You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2005/10/06 12:07:07 UTC

svn commit: r306572 - in /cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon: components/persistence/CastorSourceConverter.java portal/profile/impl/CopletInstanceDataManager.java portal/profile/impl/GroupBasedProfileManager.java

Author: cziegeler
Date: Thu Oct  6 03:06:57 2005
New Revision: 306572

URL: http://svn.apache.org/viewcvs?rev=306572&view=rev
Log:
Fix profile saving and improve castor usage

Modified:
    cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/components/persistence/CastorSourceConverter.java
    cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/CopletInstanceDataManager.java
    cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java

Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/components/persistence/CastorSourceConverter.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/components/persistence/CastorSourceConverter.java?rev=306572&r1=306571&r2=306572&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/components/persistence/CastorSourceConverter.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/components/persistence/CastorSourceConverter.java Thu Oct  6 03:06:57 2005
@@ -46,7 +46,7 @@
 import org.xml.sax.InputSource;
 
 /**
- * This is a component that converts the profiles (= object tree) to XML and vice-versa
+ * This is a component converting the profiles (= object tree) to XML and vice-versa
  * using Castor. It could be used to persist objects as a XML representation.
  * 
  * In order to work properly the methods provided by this interface require some 
@@ -71,16 +71,15 @@
     private ServiceManager manager;
     private Map mappings = new HashMap();
     private boolean defaultSuppressXSIType;
-    
+    private boolean defaultValidateUnmarshalling;
+
     public Object getObject(InputStream stream, Map parameters) throws ConverterException {
         try {
             ReferenceFieldHandler.setObjectMap((Map)parameters.get(ProfileLS.PARAMETER_OBJECTMAP));
-            Unmarshaller unmarshaller = new Unmarshaller((Mapping)this.mappings.get(parameters.get(ProfileLS.PARAMETER_PROFILETYPE)));
+            Unmarshaller unmarshaller = (Unmarshaller)((Object[])this.mappings.get(parameters.get(ProfileLS.PARAMETER_PROFILETYPE)))[1];
             Object result = unmarshaller.unmarshal(new InputSource(stream));
             stream.close();
             return result;
-        } catch (MappingException e) {
-            throw new ConverterException("Can't create Unmarshaller", e);
         } catch (Exception e) {
             throw new ConverterException(e.getMessage(), e);
         }
@@ -90,7 +89,7 @@
         Writer writer = new OutputStreamWriter(stream);
 		try {
 			Marshaller marshaller = new Marshaller( writer );
-			marshaller.setMapping((Mapping)this.mappings.get(parameters.get(ProfileLS.PARAMETER_PROFILETYPE)));
+			marshaller.setMapping((Mapping)((Object[])this.mappings.get(parameters.get(ProfileLS.PARAMETER_PROFILETYPE)))[0]);
             boolean suppressXSIType = this.defaultSuppressXSIType;
             Boolean value = (Boolean)parameters.get("suppressXSIType");
             if (value != null) {
@@ -106,14 +105,14 @@
 		}
 	}
 
-    /* (non-Javadoc)
+    /**
      * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
      */
     public void service(ServiceManager manager) throws ServiceException {
         this.manager = manager;
     }
 
-    /* (non-Javadoc)
+    /**
      * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
      */
     public void configure(Configuration config) throws ConfigurationException {
@@ -123,9 +122,10 @@
     		this.mappingSources.put(mappingSource.getAttribute("source"), mappingSource.getValue());
     	}
         this.defaultSuppressXSIType = config.getChild("suppressXSIType").getValueAsBoolean(false);
+        this.defaultValidateUnmarshalling = config.getChild("validate-on-unmarshalling").getValueAsBoolean(false);
     }
 
-    /* (non-Javadoc)
+    /**
      * @see org.apache.avalon.framework.activity.Initializable#initialize()
      */
     public void initialize() throws Exception {
@@ -145,7 +145,11 @@
 				source = resolver.resolveURI(mappingSource);
 				mapping = new Mapping();
 				mapping.loadMapping(SourceUtil.getInputSource(source));
-				this.mappings.put(name, mapping);
+
+                // create unmarshaller
+                final Unmarshaller unmarshaller = new Unmarshaller(mapping);
+                unmarshaller.setValidation(this.defaultValidateUnmarshalling);
+                this.mappings.put(name, new Object[] {mapping, unmarshaller});
         	}
         } finally {
             if (source != null) {

Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/CopletInstanceDataManager.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/CopletInstanceDataManager.java?rev=306572&r1=306571&r2=306572&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/CopletInstanceDataManager.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/CopletInstanceDataManager.java Thu Oct  6 03:06:57 2005
@@ -25,15 +25,23 @@
  *
  * @author <a href="mailto:bluetkemeier@s-und-n.de">Bj&ouml;rn L&uuml;tkemeier</a>
  * 
- * @version CVS $Id: CopletInstanceDataManager.java,v 1.5 2004/03/05 13:02:16 bdelacretaz Exp $
+ * @version CVS $Id$
  */
 public class CopletInstanceDataManager {
 	
 	/**
 	 * The coplet instance data instances.
 	 */
-	private Map copletInstanceData = new HashMap();
-	
+	private final Map copletInstanceData;
+
+    public CopletInstanceDataManager() {
+        this.copletInstanceData = new HashMap();
+    }
+
+    public CopletInstanceDataManager(Map instances) {
+        this.copletInstanceData = instances;
+    }
+
 	/**
 	 * Gets all coplet instance data.
 	 */

Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java?rev=306572&r1=306571&r2=306572&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java Thu Oct  6 03:06:57 2005
@@ -1,12 +1,12 @@
 /*
- * Copyright 1999-2002,2004 The Apache Software Foundation.
- * 
+ * Copyright 1999-2002,2004-2005 The Apache Software Foundation.
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -639,5 +639,73 @@
         } finally {
             this.manager.release(service);
         }            
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.profile.ProfileManager#saveUserCopletInstanceDatas(java.lang.String)
+     */
+    public void saveUserCopletInstanceDatas(String layoutKey) {
+        ProfileLS adapter = null;
+        PortalService service = null;
+        try {
+            service = (PortalService) this.manager.lookup(PortalService.ROLE);
+            adapter = (ProfileLS) this.manager.lookup(ProfileLS.ROLE);
+            if (layoutKey == null) {
+                layoutKey = service.getDefaultLayoutKey();
+            }
+            final UserProfile profile = this.getUserProfile(layoutKey);
+
+            final Map parameters = new HashMap();
+            parameters.put(ProfileLS.PARAMETER_PROFILETYPE, 
+                           ProfileLS.PROFILETYPE_COPLETINSTANCEDATA);        
+
+            final UserInfo info = this.provider.getUserInfo(service.getPortalName(), layoutKey);
+            final Map key = this.buildKey(CATEGORY_USER,
+                                          ProfileLS.PROFILETYPE_COPLETINSTANCEDATA, 
+                                          info, 
+                                          false);
+            // FIXME - we should be able to save without creating a CopletInstanceDataManager
+            CopletInstanceDataManager cidm = new CopletInstanceDataManager(profile.getCopletInstanceDatas());
+            adapter.saveProfile(key, parameters, cidm);
+        } catch (Exception e) {
+            // TODO
+            throw new CascadingRuntimeException("Exception during save profile", e);
+        } finally {
+            this.manager.release(service);
+            this.manager.release(adapter);
+        }
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.profile.ProfileManager#saveUserLayout(java.lang.String)
+     */
+    public void saveUserLayout(String layoutKey) {
+        ProfileLS adapter = null;
+        PortalService service = null;
+        try {
+            service = (PortalService) this.manager.lookup(PortalService.ROLE);
+            adapter = (ProfileLS) this.manager.lookup(ProfileLS.ROLE);
+            if (layoutKey == null) {
+                layoutKey = service.getDefaultLayoutKey();
+            }
+            final UserProfile profile = this.getUserProfile(layoutKey);
+
+            final Map parameters = new HashMap();
+            parameters.put(ProfileLS.PARAMETER_PROFILETYPE, 
+                           ProfileLS.PROFILETYPE_LAYOUT);        
+
+            final UserInfo info = this.provider.getUserInfo(service.getPortalName(), layoutKey);
+            final Map key = this.buildKey(CATEGORY_USER,
+                                          ProfileLS.PROFILETYPE_LAYOUT, 
+                                          info, 
+                                          false);
+            adapter.saveProfile(key, parameters, profile.getRootLayout());
+        } catch (Exception e) {
+            // TODO
+            throw new CascadingRuntimeException("Exception during save profile", e);
+        } finally {
+            this.manager.release(service);
+            this.manager.release(adapter);
+        }
     }
 }