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);