You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2011/12/31 03:39:39 UTC
svn commit: r1226027 - in /abdera/abdera2:
common/src/main/java/org/apache/abdera2/common/io/
core/src/main/java/org/apache/abdera2/model/
core/src/main/java/org/apache/abdera2/parser/
core/src/main/java/org/apache/abdera2/parser/axiom/ core/src/main/j...
Author: jmsnell
Date: Sat Dec 31 02:39:39 2011
New Revision: 1226027
URL: http://svn.apache.org/viewvc?rev=1226027&view=rev
Log:
Immutable/Threadsafe treatment for WriterOptions too
Removed:
abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMWriterOptions.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/AbstractWriterOptions.java
Modified:
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/io/Compression.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/model/Base.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/model/ElementWrapper.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/AbstractParser.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMDocument.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMElement.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMWriter.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/PrettyWriter.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/AbstractWriter.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/WriterOptions.java
abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/activities/FeedToActivityWriter.java
abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/json/JSONWriter.java
abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/AppTest.java
abdera/abdera2/test/src/main/java/org/apache/abdera2/test/parser/EncodingTest.java
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/io/Compression.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/io/Compression.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/io/Compression.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/io/Compression.java Sat Dec 31 02:39:39 2011
@@ -79,6 +79,10 @@ public class Compression {
checkArgument(exp, "At least one codec must be specified");
}
+ public static OutputStream wrap(OutputStream out, Iterable<CompressionCodec> codecs) throws IOException {
+ return wrap(out,Iterables.toArray(codecs,CompressionCodec.class));
+ }
+
public static OutputStream wrap(
OutputStream out,
CompressionCodec... codecs)
Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/model/Base.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/model/Base.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/model/Base.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/model/Base.java Sat Dec 31 02:39:39 2011
@@ -35,6 +35,8 @@ public interface Base extends Cloneable
* Get the default WriterOptions for this object
*/
WriterOptions getDefaultWriterOptions();
+
+ WriterOptions.Builder makeDefaultWriterOptions();
/**
* Serializes the model component out to the specified stream
Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/model/ElementWrapper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/model/ElementWrapper.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/model/ElementWrapper.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/model/ElementWrapper.java Sat Dec 31 02:39:39 2011
@@ -293,6 +293,10 @@ public abstract class ElementWrapper imp
internal.writeTo(out, options);
}
+ public WriterOptions.Builder makeDefaultWriterOptions() {
+ return internal.makeDefaultWriterOptions();
+ }
+
public WriterOptions getDefaultWriterOptions() {
return internal.getDefaultWriterOptions();
}
Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/AbstractParser.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/AbstractParser.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/AbstractParser.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/AbstractParser.java Sat Dec 31 02:39:39 2011
@@ -136,7 +136,7 @@ public abstract class AbstractParser imp
protected abstract ParserOptions.Builder initDefaultParserOptions();
public synchronized Parser setDefaultParserOptions(ParserOptions options) {
- this.options = options;
+ this.options = options != null ? options : initDefaultParserOptions().get();
return this;
}
Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMDocument.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMDocument.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMDocument.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMDocument.java Sat Dec 31 02:39:39 2011
@@ -325,6 +325,10 @@ public class FOMDocument<T extends Eleme
public WriterOptions getDefaultWriterOptions() {
return new FOMWriter().getDefaultWriterOptions();
}
+
+ public WriterOptions.Builder makeDefaultWriterOptions() {
+ return new FOMWriter().makeDefaultWriterOptions();
+ }
/**
* Ensure that the underlying streams are fully parsed. We might eventually need to find a more efficient way of
Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMElement.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMElement.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMElement.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMElement.java Sat Dec 31 02:39:39 2011
@@ -761,6 +761,10 @@ public class FOMElement extends OMElemen
public WriterOptions getDefaultWriterOptions() {
return new FOMWriter().getDefaultWriterOptions();
}
+
+ public WriterOptions.Builder makeDefaultWriterOptions() {
+ return new FOMWriter().makeDefaultWriterOptions();
+ }
/**
* Ensure that the underlying streams are fully parsed. We might eventually need to find a more efficient way of
Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMWriter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMWriter.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMWriter.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMWriter.java Sat Dec 31 02:39:39 2011
@@ -92,8 +92,8 @@ public class FOMWriter extends AbstractW
}
@Override
- protected WriterOptions initDefaultWriterOptions() {
- return new FOMWriterOptions();
+ protected WriterOptions.Builder initDefaultWriterOptions() {
+ return WriterOptions.make();
}
}
Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/PrettyWriter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/PrettyWriter.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/PrettyWriter.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/PrettyWriter.java Sat Dec 31 02:39:39 2011
@@ -34,7 +34,6 @@ import org.apache.abdera2.model.Document
import org.apache.abdera2.model.Element;
import org.apache.abdera2.model.ElementWrapper;
import org.apache.abdera2.writer.AbstractWriter;
-import org.apache.abdera2.writer.AbstractWriterOptions;
import org.apache.abdera2.writer.WriterOptions;
import org.apache.axiom.om.OMDocument;
import org.apache.axiom.om.OMElement;
@@ -284,9 +283,8 @@ public class PrettyWriter extends Abstra
}
@Override
- protected WriterOptions initDefaultWriterOptions() {
- return new AbstractWriterOptions() {
- };
+ protected WriterOptions.Builder initDefaultWriterOptions() {
+ return WriterOptions.make();
}
}
Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/AbstractWriter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/AbstractWriter.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/AbstractWriter.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/AbstractWriter.java Sat Dec 31 02:39:39 2011
@@ -46,35 +46,19 @@ public abstract class AbstractWriter imp
}
public synchronized WriterOptions getDefaultWriterOptions() {
- if (options == null)
- options = initDefaultWriterOptions();
-
- // Make a copy of the options, so that changes to it don't result in
- // changes to the Parser's defaults. Also, this allows us to remain
- // thread safe without having to make ParseOptions implementations
- // synchronized.
-
- try {
- return (WriterOptions)options.clone();
- } catch (CloneNotSupportedException cnse) {
- // This shouldn't actually happen
- throw new RuntimeException(cnse);
- }
+ if (options == null)
+ options = initDefaultWriterOptions().get();
+ return options;
+ }
+
+ public WriterOptions.Builder makeDefaultWriterOptions() {
+ return initDefaultWriterOptions();
}
- protected abstract WriterOptions initDefaultWriterOptions();
+ protected abstract WriterOptions.Builder initDefaultWriterOptions();
public synchronized Writer setDefaultWriterOptions(WriterOptions options) {
- // Ok, we need to make a defensive copy of the options, since otherwise
- // the caller still has access to the object, which means our access to
- // it isn't certain to be thread safe.
-
- try {
- this.options = (options != null) ? (WriterOptions)options.clone() : initDefaultWriterOptions();
- } catch (CloneNotSupportedException cnse) {
- // This shouldn't actually happen
- throw new RuntimeException(cnse);
- }
+ this.options = options != null ? options : initDefaultWriterOptions().get();
return this;
}
Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/WriterOptions.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/WriterOptions.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/WriterOptions.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/writer/WriterOptions.java Sat Dec 31 02:39:39 2011
@@ -19,37 +19,87 @@ package org.apache.abdera2.writer;
import org.apache.abdera2.common.io.Compression.CompressionCodec;
-public interface WriterOptions extends Cloneable {
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableSet;
- /**
- * When writing, use the specified compression codecs
- */
- CompressionCodec[] getCompressionCodecs();
+public class WriterOptions {
+ public static Builder make() {
+ return new Builder();
+ }
+
+ public static Builder from(WriterOptions options) {
+ Builder builder = new Builder();
+ builder.charset = options.charset;
+ builder.autoclose = options.autoclose;
+ builder.codecs.addAll(options.codecs);
+ return builder;
+ }
+
+ public static class Builder implements Supplier<WriterOptions> {
+
+ protected String charset = "UTF-8";
+ protected ImmutableSet.Builder<CompressionCodec> codecs =
+ ImmutableSet.builder();
+ protected boolean autoclose = false;
+
+ public Builder charset(String charset) {
+ this.charset = charset;
+ return this;
+ }
+
+ public Builder compression(CompressionCodec codec) {
+ this.codecs.add(codec);
+ return this;
+ }
+
+ public Builder autoclose() {
+ this.autoclose = true;
+ return this;
+ }
+
+ public Builder doNotAutoclose() {
+ this.autoclose = false;
+ return this;
+ }
+
+ public WriterOptions get() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
+ }
+
+ private final String charset;
+ private final ImmutableSet<CompressionCodec> codecs;
+ private final boolean autoclose;
+
+ WriterOptions(Builder builder) {
+ this.charset = builder.charset;
+ this.codecs = builder.codecs.build();
+ this.autoclose = builder.autoclose;
+ }
+
/**
* When writing, use the specified compression codecs
*/
- WriterOptions setCompressionCodecs(CompressionCodec... codecs);
-
- Object clone() throws CloneNotSupportedException;
+ public Iterable<CompressionCodec> getCompressionCodecs() {
+ return codecs;
+ }
/**
* The character encoding to use for the output
*/
- String getCharset();
-
- /**
- * The character encoding to use for the output
- */
- WriterOptions setCharset(String charset);
+ public String getCharset() {
+ return charset;
+ }
/**
* True if the writer should close the output stream or writer when finished
*/
- boolean getAutoClose();
+ public boolean getAutoClose() {
+ return autoclose;
+ }
- /**
- * True if the writer should close the output stream or writer when finished
- */
- WriterOptions setAutoClose(boolean autoclose);
}
Modified: abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/activities/FeedToActivityWriter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/activities/FeedToActivityWriter.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/activities/FeedToActivityWriter.java (original)
+++ abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/activities/FeedToActivityWriter.java Sat Dec 31 02:39:39 2011
@@ -14,9 +14,11 @@ import org.apache.abdera2.model.Document
import org.apache.abdera2.model.Entry;
import org.apache.abdera2.model.Feed;
import org.apache.abdera2.writer.AbstractWriter;
-import org.apache.abdera2.writer.AbstractWriterOptions;
import org.apache.abdera2.writer.Writer;
import org.apache.abdera2.writer.WriterOptions;
+
+import com.google.common.collect.Iterables;
+
import static com.google.common.base.Preconditions.*;
@Name("activity")
@@ -49,8 +51,7 @@ public class FeedToActivityWriter
checkNotNull(base);
}
checkArgument(base instanceof Feed || base instanceof Entry);
- if (options.getCompressionCodecs() != null &&
- options.getCompressionCodecs().length > 0)
+ if (!Iterables.isEmpty(options.getCompressionCodecs()))
out = Compression.wrap(out, options.getCompressionCodecs());
if (base instanceof Entry) {
f2ac.convert((Entry)base).writeTo(out,options.getCharset());
@@ -96,9 +97,8 @@ public class FeedToActivityWriter
}
}
- protected WriterOptions initDefaultWriterOptions() {
- return new AbstractWriterOptions() {
- };
+ protected WriterOptions.Builder initDefaultWriterOptions() {
+ return WriterOptions.make();
}
}
Modified: abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/json/JSONWriter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/json/JSONWriter.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/json/JSONWriter.java (original)
+++ abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/json/JSONWriter.java Sat Dec 31 02:39:39 2011
@@ -27,7 +27,6 @@ import org.apache.abdera2.Abdera;
import org.apache.abdera2.common.anno.Name;
import org.apache.abdera2.model.Base;
import org.apache.abdera2.writer.AbstractWriter;
-import org.apache.abdera2.writer.AbstractWriterOptions;
import org.apache.abdera2.writer.WriterOptions;
@Name("json")
@@ -43,9 +42,8 @@ public class JSONWriter extends Abstract
}
@Override
- protected WriterOptions initDefaultWriterOptions() {
- return new AbstractWriterOptions() {
- };
+ protected WriterOptions.Builder initDefaultWriterOptions() {
+ return WriterOptions.make();
}
public Object write(Base base, WriterOptions options) throws IOException {
Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/AppTest.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/AppTest.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/AppTest.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/AppTest.java Sat Dec 31 02:39:39 2011
@@ -142,8 +142,8 @@ public class AppTest {
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/atomsvc+xml; charset=utf-8");
- WriterOptions options = service.getDefaultWriterOptions();
- options.setCharset("UTF-8");
+ WriterOptions options = service.makeDefaultWriterOptions()
+ .charset("UTF-8").get();
service.writeTo(response.getOutputStream(), options);
}
}
@@ -184,8 +184,8 @@ public class AppTest {
case COLLECTION:
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/atom+xml; charset=utf-8");
- WriterOptions options = feed.getDefaultWriterOptions();
- options.setCharset("UTF-8");
+ WriterOptions options = feed.makeDefaultWriterOptions()
+ .charset("UTF-8").get();
feed.writeTo(response.getOutputStream(), options);
break;
case ENTRY:
@@ -193,8 +193,8 @@ public class AppTest {
Entry entry = feed.getRoot().getEntries().get(getTarget());
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/atom+xml; charset=utf-8");
- options = entry.getDefaultWriterOptions();
- options.setCharset("UTF-8");
+ options = entry.makeDefaultWriterOptions()
+ .charset("UTF-8").get();
entry.writeTo(response.getOutputStream(), options);
} catch (Exception e) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
@@ -245,8 +245,8 @@ public class AppTest {
response.setStatus(HttpServletResponse.SC_CREATED);
response.setHeader("Location", entry.getId().toString());
response.setHeader("Content-Location", entry.getId().toString());
- WriterOptions woptions = entry.getDefaultWriterOptions();
- woptions.setCharset("UTF-8");
+ WriterOptions woptions = entry.makeDefaultWriterOptions()
+ .charset("UTF-8").get();
entry.writeTo(response.getOutputStream(), woptions);
return;
}
@@ -272,8 +272,8 @@ public class AppTest {
response.setStatus(HttpServletResponse.SC_CREATED);
response.setHeader("Location", entry.getId().toString());
response.setHeader("Content-Location", entry.getId().toString());
- WriterOptions woptions = entry.getDefaultWriterOptions();
- woptions.setCharset("UTF-8");
+ WriterOptions woptions = entry.makeDefaultWriterOptions()
+ .charset("UTF-8").get();
entry.writeTo(response.getOutputStream(), woptions);
return;
}
Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/parser/EncodingTest.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/parser/EncodingTest.java?rev=1226027&r1=1226026&r2=1226027&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/parser/EncodingTest.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/parser/EncodingTest.java Sat Dec 31 02:39:39 2011
@@ -118,10 +118,12 @@ public class EncodingTest {
entry.setTitle("1");
ByteArrayOutputStream out = new ByteArrayOutputStream();
- WriterOptions writeoptions = entry.getDefaultWriterOptions();
- writeoptions.setCompressionCodecs(CompressionCodec.DEFLATE);
- writeoptions.setCharset("UTF-16");
- writeoptions.setAutoClose(true);
+ WriterOptions writeoptions =
+ entry.makeDefaultWriterOptions()
+ .compression(CompressionCodec.DEFLATE)
+ .charset("UTF-16")
+ .autoclose()
+ .get();
entry.getDocument().writeTo(out, writeoptions);
out.close();