Author: ningjiang
Date: Fri Dec 18 11:53:36 2009
New Revision: 892230

URL: http://svn.apache.org/viewvc?rev=892230&view=rev
Log:
CAMEL-2148 improved the code with the suggestion of Claus

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
    
camel/trunk/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java?rev=892230&r1=892229&r2=892230&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java
 Fri Dec 18 11:53:36 2009
@@ -187,6 +187,12 @@
         return dataFormat(new ProtobufDataFormat());
     }
     
+    public T protobuf(Object defaultInstance) {
+        ProtobufDataFormat dataFormat = new ProtobufDataFormat();
+        dataFormat.setDefaultInstance(defaultInstance);
+        return dataFormat(dataFormat);
+    }
+    
     public T protobuf(String instanceClassName) {
         return dataFormat(new ProtobufDataFormat(instanceClassName));
     }

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java?rev=892230&r1=892229&r2=892230&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
 Fri Dec 18 11:53:36 2009
@@ -38,6 +38,8 @@
     @XmlAttribute(required = false)
     private String instanceClass;
     
+    private Object defaultInstance;
+    
     public ProtobufDataFormat() {
         super("protobuf");
     }
@@ -51,11 +53,18 @@
         this.instanceClass = instanceClass;
     }
     
+    public void setDefaultInstance(Object instance) {
+        this.defaultInstance = instance;
+    }
+    
     @Override
     protected void configureDataFormat(DataFormat dataFormat) {
         if (this.instanceClass != null) {
             setProperty(dataFormat, "instanceClass", instanceClass);
         }
+        if (this.defaultInstance != null) {
+            setProperty(dataFormat, "defaultInstance", defaultInstance);
+        }
     }
 
 }

Modified: 
camel/trunk/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java?rev=892230&r1=892229&r2=892230&view=diff
==============================================================================
--- 
camel/trunk/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java
 (original)
+++ 
camel/trunk/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java
 Fri Dec 18 11:53:36 2009
@@ -53,6 +53,14 @@
         this.defaultInstance = instance;
     }
     
+    public void setDefaultInstance(Object instance) {
+        if (instance instanceof Message) {
+            this.defaultInstance = (Message) instance;
+        } else {
+            throw new IllegalArgumentException("The instance should be 
subClass of com.google.protobuf.Message");
+        }
+    }
+    
     public void setInstanceClass(String className) throws Exception {
         ObjectHelper.notNull(className, "ProtobufDataFormat instaceClass");
         instanceClassName = className;
@@ -94,8 +102,10 @@
             if (instanceClassName == null) {
                 throw new CamelException("There is not defaultInstance for 
protobuf unmarshaling");
             } else {
-                if (!setDefaultInstanceHasBeenCalled.getAndSet(true)) {
-                    defaultInstance = loadDefaultInstance(instanceClassName, 
exchange.getContext());
+                synchronized (this) {
+                    if (!setDefaultInstanceHasBeenCalled.getAndSet(true)) {
+                        defaultInstance = 
loadDefaultInstance(instanceClassName, exchange.getContext());
+                    }
                 }
             }
         }


Reply via email to