Added more javadoc

git-svn-id: https://svn.apache.org/repos/asf/directmemory/lightning/trunk@1398082 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/ClassComparisonStrategy.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/ClassComparisonStrategy.java
index 1268095..673b465 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/ClassComparisonStrategy.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/ClassComparisonStrategy.java
@@ -19,8 +19,21 @@
 package org.apache.directmemory.lightning;
 
 /**
+ * <p>
  * Defines the comparison strategy of classes between different serializers. The standard strategy of Java is
  * SerialVersionUID but Lightning has some lighter algorithm which only takes properties into account.
+ * </p>
+ * <p>
+ * {@link #LightningChecksum} is a lightweight checksum only taking the defined attributes into account and is pretty
+ * insensitive to other changes in classes but adding / removing of attributes is not supported. This strategy is used
+ * by default.<br>
+ * {@link #SerialVersionUID} is using the standard Java serialVersionUID fields (or if not provided calculates it's
+ * value from the given class). Using this value you can force Lightning to see different versions of a class to be
+ * compatible but only adding attributes in newer class versions is supported.<br>
+ * {@link #SkipComparison} skips any kind of comparison check and can be used when user provided marshallers can handle
+ * different versions of classes. This could be used to implement some kind of schema evolution but is only recommended
+ * for export use.
+ * </p>
  */
 public enum ClassComparisonStrategy
 {
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/Lightning.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/Lightning.java
index 6ff3d96..9ecaa31 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/Lightning.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/Lightning.java
@@ -32,6 +32,7 @@
 import org.apache.directmemory.lightning.internal.InternalSerializerCreator;
 import org.apache.directmemory.lightning.logging.Logger;
 import org.apache.directmemory.lightning.logging.NoOpLogger;
+import org.apache.directmemory.lightning.metadata.PropertyDescriptor;
 import org.apache.directmemory.lightning.metadata.ValueNullableEvaluator;
 
 public final class Lightning
@@ -41,16 +42,37 @@
     {
     }
 
+    /**
+     * Creates a new Lightning {@link Builder} for more complex configuration of a new {@link Serializer} instance.
+     * 
+     * @return A Builder instance for configuring a new {@link Serializer} instance.
+     */
     public static final Builder newBuilder()
     {
         return new Builder();
     }
 
+    /**
+     * Provides fast configuration of a new {@link Serializer} instance by just providing a bunch of
+     * {@link SerializerDefinition}s.
+     * 
+     * @param serializerDefinitions The {@link SerializerDefinition}s to use for configuring the {@link Serializer}
+     *            instance
+     * @return A new {@link Serializer} instance configured using the given {@link SerializerDefinition}s
+     */
     public static final Serializer createSerializer( SerializerDefinition... serializerDefinitions )
     {
         return createSerializer( Arrays.asList( serializerDefinitions ) );
     }
 
+    /**
+     * Provides fast configuration of a new {@link Serializer} instance by just providing a bunch of
+     * {@link SerializerDefinition}s.
+     * 
+     * @param serializerDefinitions The {@link SerializerDefinition}s to use for configuring the {@link Serializer}
+     *            instance
+     * @return A new {@link Serializer} instance configured using the given {@link SerializerDefinition}s
+     */
     public static final Serializer createSerializer( Iterable<? extends SerializerDefinition> serializerDefinitions )
     {
         return new Builder().serializerDefinitions( serializerDefinitions ).build();
@@ -77,35 +99,99 @@
         {
         }
 
+        /**
+         * Defines a basic {@link Annotation} to describe an class attribute (instance field) as an attribute (de-)
+         * serialized by Lightning.
+         * 
+         * @param attributeAnnotation {@link Annotation} to describe a field as an serializable attribute
+         * @return The actual builder instance for chaining
+         */
         public Builder describesAttributs( Class<? extends Annotation> attributeAnnotation )
         {
             this.attributeAnnotation = attributeAnnotation;
             return this;
         }
 
+        /**
+         * Defines a directory where generated classes should be stored for debug purpose.
+         * 
+         * @param debugCacheDirectory Directory for storing generated class files
+         * @return The actual builder instance for chaining
+         */
         public Builder debugCacheDirectory( File debugCacheDirectory )
         {
             this.debugCacheDirectory = debugCacheDirectory;
             return this;
         }
 
+        /**
+         * <p>
+         * The strategy to be used for serializing objects. There are two different strategies provided:
+         * </p>
+         * <p>
+         * {@link SerializationStrategy#SpeedOptimized} does not look for same instances to be (de-) serialized only
+         * once but written many times to the stream. This maybe needs more bytes in the stream but is faster because no
+         * additional metadata needs to be managened.<br>
+         * {@link SerializationStrategy#SizeOptimized} manages metadata of the allready serialized data and will not
+         * serialize them again (but just writing an object-id to the stream). This will likely save bytes but managing
+         * the metadata is using some time.
+         * </p>
+         * 
+         * @param serializationStrategy The strategy to be used when serialize data
+         * @return The actual builder instance for chaining
+         */
         public Builder serializationStrategy( SerializationStrategy serializationStrategy )
         {
             this.serializationStrategy = serializationStrategy;
             return this;
         }
 
+        /**
+         * <p>
+         * The strategy to be used to compare class informations of different serializers (for example in clustered
+         * environments). Lightning offers three different strategies:
+         * </p>
+         * <p>
+         * {@link ClassComparisonStrategy#LightningChecksum} is a lightweight checksum only taking the defined
+         * attributes into account and is pretty insensitive to other changes in classes but adding / removing of
+         * attributes is not supported. This strategy is used by default.<br>
+         * {@link ClassComparisonStrategy#SerialVersionUID} is using the standard Java serialVersionUID fields (or if
+         * not provided calculates it's value from the given class). Using this value you can force Lightning to see
+         * different versions of a class to be compatible but only adding attributes in newer class versions is
+         * supported.<br>
+         * {@link ClassComparisonStrategy#SkipComparison} skips any kind of comparison check and can be used when user
+         * provided marshallers can handle different versions of classes. This could be used to implement some kind of
+         * schema evolution but is only recommended for export use.
+         * </p>
+         * 
+         * @param classComparisonStrategy The strategy to be used when compare class information
+         * @return The actual builder instance for chaining
+         */
         public Builder classComparisonStrategy( ClassComparisonStrategy classComparisonStrategy )
         {
             this.classComparisonStrategy = classComparisonStrategy;
             return this;
         }
 
+        /**
+         * Defines a bunch of {@link SerializerDefinition}s to be used by the final {@link Serializer}. Multiple calls
+         * of this methods are possible.
+         * 
+         * @param serializerDefinitions The {@link SerializerDefinition}s to use for configuring the {@link Serializer}
+         * @return The actual builder instance for chaining
+         */
         public Builder serializerDefinitions( SerializerDefinition... serializerDefinitions )
         {
             return serializerDefinitions( Arrays.asList( serializerDefinitions ) );
         }
 
+        /**
+         * Defines a bunch of {@link SerializerDefinition}s to be used by the final {@link Serializer}. Multiple calls
+         * of this methods are possible.
+         * 
+         * @param serializerDefinitions The {@link SerializerDefinition}s to use for configuring the {@link Serializer}
+         * @return The actual builder instance for chaining
+         */
         public Builder serializerDefinitions( Iterable<? extends SerializerDefinition> serializerDefinitions )
         {
             for ( SerializerDefinition serializerDefinition : serializerDefinitions )
@@ -115,18 +201,42 @@
             return this;
         }
 
+        /**
+         * Defines a user implementation of the {@link ValueNullableEvaluator} interface which is used to evaluate if a
+         * {@link PropertyDescriptor} defined attribute can be null. A custom implementation should extends
+         * {@link DefaultValueNullableEvaluator} to inherit all standard behavior. Custom implementations are needed to
+         * give Lightning an information if a value is nullable when using customized attribute annotations.
+         * 
+         * @param valueNullableEvaluator A {@link ValueNullableEvaluator} implementation to evaluate a value is nullable
+         *            or not
+         * @return The actual builder instance for chaining
+         */
         public Builder setValueNullableEvaluator( ValueNullableEvaluator valueNullableEvaluator )
         {
             this.valueNullableEvaluator = valueNullableEvaluator;
             return this;
         }
 
+        /**
+         * A custom logger implementation can be given to the {@link Serializer} to redirect logging output to any other
+         * logging framework like slf4j, log4j, java.util.Logging or even a custom framework.
+         * 
+         * @param logger The {@link Logger} implementation to be used for logging events.
+         * @return The actual builder instance for chaining
+         */
         public Builder logger( Logger logger )
         {
             this.logger = logger;
             return this;
         }
 
+        /**
+         * Finally builds the {@link Serializer} using the given configurations. In that step all {@link Marshaller}
+         * implementations (that are not provided by the user) are autogenerated using the given
+         * {@link SerializerDefinition}s.
+         * 
+         * @return The configured and ready to use {@link Serializer}
+         */
         public Serializer build()
         {
             return new InternalSerializerCreator().setLogger( logger ).setSerializationStrategy( serializationStrategy ).setClassComparisonStrategy( classComparisonStrategy ).setAttributeAnnotation( attributeAnnotation ).setDebugCacheDirectory( debugCacheDirectory ).setValueNullableEvaluator( valueNullableEvaluator ).addSerializerDefinitions( serializerDefinitions ).build();