cziegeler    2003/05/27 00:38:33

  Modified:    src/blocks/portal/java/org/apache/cocoon/portal/profile/impl
                        SimpleProfileManager.java MapSourceAdapter.java
               src/blocks/portal/java/org/apache/cocoon/components/persistance
                        CastorSourceConverter.java
  Log:
  Save profile
  
  Revision  Changes    Path
  1.12      +6 -6      
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/SimpleProfileManager.java
  
  Index: SimpleProfileManager.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/SimpleProfileManager.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- SimpleProfileManager.java 26 May 2003 14:29:53 -0000      1.11
  +++ SimpleProfileManager.java 27 May 2003 07:38:33 -0000      1.12
  @@ -149,10 +149,10 @@
                   // now search for a layout
                   Map layoutMap = (Map)service.getAttribute("layout-map");
                   if ( layoutMap == null ) {
  -                    Object[] objects = 
(Object[])service.getAttribute(portalPrefix+"/Layout");
  -                    if (objects != null && objects[0] != null) {
  +                    layout = 
(Layout)service.getAttribute(portalPrefix+"/Layout");
  +                    if (layout != null) {
                           layoutMap = new HashMap();
  -                        this.cacheLayouts(layoutMap, (Layout)objects[0]);
  +                        this.cacheLayouts(layoutMap, layout);
                           service.setAttribute("layout-map", layoutMap);
                       }
                   }
  @@ -369,8 +369,8 @@
                        try {
                                adapter = (MapSourceAdapter) 
this.manager.lookup(MapSourceAdapter.ROLE);
                                map.put("type", "user");
  -                             // FIXME - disabled saving for testing
  -                             // adapter.saveProfile(key, map, result);
  +                             
  +                adapter.saveProfile(key, map, result);
                        } finally {
                                this.manager.release(adapter);
                        }
  
  
  
  1.4       +51 -25    
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/MapSourceAdapter.java
  
  Index: MapSourceAdapter.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/MapSourceAdapter.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- MapSourceAdapter.java     26 May 2003 14:29:53 -0000      1.3
  +++ MapSourceAdapter.java     27 May 2003 07:38:33 -0000      1.4
  @@ -50,9 +50,9 @@
   */
   package org.apache.cocoon.portal.profile.impl;
   
  +import java.io.ByteArrayOutputStream;
   import java.io.IOException;
   import java.io.InputStreamReader;
  -import java.io.StringWriter;
   import java.util.Map;
   
   import org.apache.avalon.framework.component.Component;
  @@ -66,8 +66,9 @@
   import org.apache.avalon.framework.thread.ThreadSafe;
   import org.apache.cocoon.components.persistance.CastorSourceConverter;
   import org.apache.cocoon.portal.profile.ProfileLS;
  -import org.apache.cocoon.portal.util.*;
  +import org.apache.cocoon.portal.util.ReferenceFieldHandler;
   import org.apache.cocoon.xml.dom.DOMUtil;
  +import org.apache.excalibur.source.ModifiableSource;
   import org.apache.excalibur.source.Source;
   import org.apache.excalibur.source.SourceResolver;
   import org.apache.excalibur.source.SourceValidity;
  @@ -134,14 +135,14 @@
                buffer.append(mapKey.get("user"));
   
                String sourceURI = buffer.toString();
  -             SourceResolver resolver = (SourceResolver) 
this.manager.lookup(SourceResolver.ROLE);
                Source source = null;
                CastorSourceConverter converter = null;
  +        SourceResolver resolver = (SourceResolver) 
this.manager.lookup(SourceResolver.ROLE);
                try {
                        source = resolver.resolveURI(sourceURI);
  -                     converter = (CastorSourceConverter) 
this.manager.lookup(CastorSourceConverter.ROLE);
  +            converter = (CastorSourceConverter) 
this.manager.lookup(CastorSourceConverter.ROLE);
  +            ReferenceFieldHandler.setObjectMap((Map)map.get("objectmap"));
   
  -                     
ReferenceFieldHandler.setObjectMap((Map)map.get("objectmap"));
                        return converter.getObject(source.getInputStream(), 
profile);
                } finally {
                        resolver.release(source);
  @@ -155,13 +156,13 @@
        */
       public void saveProfile(Object key, Map map, Object profile) throws 
Exception {
                Map mapKey = (Map) key;
  -             StringBuffer buffer = new StringBuffer();
   
                String profileName = (String)map.get("profile");
   
                Configuration config = 
((Configuration)mapKey.get("config")).getChild("profiles");
                Object type = map.get("type");
  -             String uri = null, configKey = null;
  +             String uri = null;
  +        String configKey = null;
                try {
                        if (type == null) {
                                configKey = profileName+"-save";
  @@ -179,6 +180,30 @@
                } catch (Exception e) {
                        throw new ConfigurationException("Error reading URI 
from configuration "+configKey, e);
                }
  +        
  +        // first test: modifiable source?
  +        SourceResolver resolver = null;
  +        CastorSourceConverter converter = null;
  +        Source source = null;
  +        try {
  +            resolver = (SourceResolver) 
this.manager.lookup(SourceResolver.ROLE);
  +            source = resolver.resolveURI(uri);
  +            if ( source instanceof ModifiableSource ) {
  +                converter = (CastorSourceConverter) 
this.manager.lookup(CastorSourceConverter.ROLE);
  +                converter.storeObject( 
((ModifiableSource)source).getOutputStream(), profileName, profile);
  +                return;
  +            }
  +
  +        } finally {
  +            resolver.release(source);
  +            manager.release(converter);
  +            manager.release(resolver);
  +            source = null;
  +            converter = null;
  +            resolver = null;
  +        }
  +        
  +        StringBuffer buffer = new StringBuffer();
                buffer.append(uri);
   
                if (uri.indexOf("?") == -1) {
  @@ -194,25 +219,26 @@
                buffer.append("&user=");
                buffer.append(mapKey.get("user"));
   
  -             SourceResolver resolver = (SourceResolver) 
this.manager.lookup(SourceResolver.ROLE);
  -             Source source = null;
  -             CastorSourceConverter converter = null;
                SAXParser parser = null;
                try {
  -                     StringWriter writer = new StringWriter();
  -                     
  -                     converter = (CastorSourceConverter) 
this.manager.lookup(CastorSourceConverter.ROLE);
  -                     converter.storeObject(writer, profileName, profile);
  -
  -                     buffer.append("&content=");
  -                     buffer.append(writer.toString());
  -
  -                     source = resolver.resolveURI(buffer.toString());
  -                     parser = (SAXParser)this.manager.lookup(SAXParser.ROLE);
  -                     Element element = DOMUtil.getDocumentFragment(parser, 
new 
InputStreamReader(source.getInputStream())).getOwnerDocument().getDocumentElement();
  -                     if (!DOMUtil.getValueOf(element, 
"descendant::sourceResult/execution").trim().equals("success")) {
  -                             throw new IOException("Could not save profile: 
"+DOMUtil.getValueOf(element, "descendant::sourceResult/message"));
  -                     }
  +            resolver = (SourceResolver) 
this.manager.lookup(SourceResolver.ROLE);
  +            converter = (CastorSourceConverter) 
this.manager.lookup(CastorSourceConverter.ROLE);
  +
  +            ByteArrayOutputStream writer = new ByteArrayOutputStream();
  +        
  +            converter.storeObject(writer, profileName, profile);
  +
  +            buffer.append("&content=");
  +            buffer.append(writer.toString());
  +
  +            source = resolver.resolveURI(buffer.toString());
  +
  +            parser = (SAXParser)this.manager.lookup(SAXParser.ROLE);
  +            Element element = DOMUtil.getDocumentFragment(parser, new 
InputStreamReader(source.getInputStream())).getOwnerDocument().getDocumentElement();
  +            if (!DOMUtil.getValueOf(element, 
"descendant::sourceResult/execution").trim().equals("success")) {
  +                throw new IOException("Could not save profile: 
"+DOMUtil.getValueOf(element, "descendant::sourceResult/message"));
  +            }
  +
                } finally {
                        resolver.release(source);
                        manager.release((Component)parser);
  
  
  
  1.4       +6 -4      
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/components/persistance/CastorSourceConverter.java
  
  Index: CastorSourceConverter.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/components/persistance/CastorSourceConverter.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CastorSourceConverter.java        22 May 2003 15:19:48 -0000      1.3
  +++ CastorSourceConverter.java        27 May 2003 07:38:33 -0000      1.4
  @@ -50,8 +50,9 @@
   */
   package org.apache.cocoon.components.persistance;
   
  -import java.io.BufferedWriter;
   import java.io.InputStream;
  +import java.io.OutputStream;
  +import java.io.OutputStreamWriter;
   import java.io.Writer;
   import java.util.HashMap;
   import java.util.Iterator;
  @@ -108,9 +109,10 @@
           }
       }
   
  -     public void storeObject(Writer writer, String name, Object object) 
throws ConverterException {
  +     public void storeObject(OutputStream stream, String name, Object 
object) throws ConverterException {
  +        Writer writer = new OutputStreamWriter(stream);
                try {
  -                     Marshaller marshaller = new Marshaller(new 
BufferedWriter(writer));
  +                     Marshaller marshaller = new Marshaller( writer );
                        Mapping mapping = new Mapping();
                        marshaller.setMapping((Mapping)this.mappings.get(name));
                        marshaller.marshal(object);
  
  
  

Reply via email to