blob: 6ff3d962257926594b4fe54846fe1222e0e422f1 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.directmemory.lightning;
import java.io.File;
import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.apache.directmemory.lightning.ClassComparisonStrategy;
import org.apache.directmemory.lightning.SerializationStrategy;
import org.apache.directmemory.lightning.Serializer;
import org.apache.directmemory.lightning.base.DefaultValueNullableEvaluator;
import org.apache.directmemory.lightning.configuration.SerializerDefinition;
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.ValueNullableEvaluator;
public final class Lightning
{
private Lightning()
{
}
public static final Builder newBuilder()
{
return new Builder();
}
public static final Serializer createSerializer( SerializerDefinition... serializerDefinitions )
{
return createSerializer( Arrays.asList( serializerDefinitions ) );
}
public static final Serializer createSerializer( Iterable<? extends SerializerDefinition> serializerDefinitions )
{
return new Builder().serializerDefinitions( serializerDefinitions ).build();
}
public static class Builder
{
private Set<SerializerDefinition> serializerDefinitions = new HashSet<SerializerDefinition>();
private SerializationStrategy serializationStrategy = SerializationStrategy.SpeedOptimized;
private Class<? extends Annotation> attributeAnnotation = null;
private ClassComparisonStrategy classComparisonStrategy = ClassComparisonStrategy.LightningChecksum;
private ValueNullableEvaluator valueNullableEvaluator = new DefaultValueNullableEvaluator();
private File debugCacheDirectory = null;
private Logger logger = new NoOpLogger();
private Builder()
{
}
public Builder describesAttributs( Class<? extends Annotation> attributeAnnotation )
{
this.attributeAnnotation = attributeAnnotation;
return this;
}
public Builder debugCacheDirectory( File debugCacheDirectory )
{
this.debugCacheDirectory = debugCacheDirectory;
return this;
}
public Builder serializationStrategy( SerializationStrategy serializationStrategy )
{
this.serializationStrategy = serializationStrategy;
return this;
}
public Builder classComparisonStrategy( ClassComparisonStrategy classComparisonStrategy )
{
this.classComparisonStrategy = classComparisonStrategy;
return this;
}
public Builder serializerDefinitions( SerializerDefinition... serializerDefinitions )
{
return serializerDefinitions( Arrays.asList( serializerDefinitions ) );
}
public Builder serializerDefinitions( Iterable<? extends SerializerDefinition> serializerDefinitions )
{
for ( SerializerDefinition serializerDefinition : serializerDefinitions )
{
this.serializerDefinitions.add( serializerDefinition );
}
return this;
}
public Builder setValueNullableEvaluator( ValueNullableEvaluator valueNullableEvaluator )
{
this.valueNullableEvaluator = valueNullableEvaluator;
return this;
}
public Builder logger( Logger logger )
{
this.logger = logger;
return this;
}
public Serializer build()
{
return new InternalSerializerCreator().setLogger( logger ).setSerializationStrategy( serializationStrategy ).setClassComparisonStrategy( classComparisonStrategy ).setAttributeAnnotation( attributeAnnotation ).setDebugCacheDirectory( debugCacheDirectory ).setValueNullableEvaluator( valueNullableEvaluator ).addSerializerDefinitions( serializerDefinitions ).build();
}
}
}