// Path: src/main/java/org/spearal/configuration/CoderProvider.java
// public interface Coder {
// 		
// 	void encode(ExtendedSpearalEncoder encoder, Object value) throws IOException;
// }
// 
// Path: src/main/java/org/spearal/configuration/Configurable.java
// public interface Configurable {
// 
// }
// 
// Path: src/main/java/org/spearal/configuration/FilteredBeanDescriptorFactory.java
// public interface FilteredBeanDescriptor {
// 		
// 	String getDescription();
// 	Property[] getProperties();
// 		
// 	boolean isCacheable();
// }
// 
// Path: src/main/java/org/spearal/configuration/PropertyFactory.java
// public interface Property {
// 		
// 	String getName();
// 	Class<?> getType();
// 	Type getGenericType();
// 		
// 	boolean hasField();
// 	Field getField();
// 	boolean hasGetter();
// 	Method getGetter();
// 	boolean hasSetter();
// 	Method getSetter();
// 		
// 	Class<?> getDeclaringClass();
// 		
// 	Object init(ExtendedSpearalDecoder decoder, Object holder)
// 		throws InstantiationException, IllegalAccessException, InvocationTargetException;
// 		
// 	Object get(Object holder)
// 		throws IllegalAccessException, InvocationTargetException;
// 		
// 	void set(Object holder, Object value)
// 		throws IllegalAccessException, InvocationTargetException;
// 		
// 	boolean isAnnotationPresent(Class<? extends Annotation> annotationClass);
// 	<A extends Annotation> A getAnnotation(Class<A> annotationClass);
// 		
// 	boolean isReadOnly();
// 		
// 	public void write(ExtendedSpearalEncoder encoder, Object holder)
// 		throws IOException, IllegalAccessException, InvocationTargetException;
// 			
// 	public void read(ExtendedSpearalDecoder decoder, Object holder, int parameterizedType)
// 		throws IOException, InstantiationException, IllegalAccessException, InvocationTargetException;
// }
// 
// Path: src/main/java/org/spearal/configuration/Securizer.java
// public interface Securizer extends Configurable {
// 
// 	void checkDecodable(Type type) throws SecurityException;
// 	void checkEncodable(Class<?> cls) throws SecurityException;
// }


import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import org.spearal.configuration.CoderProvider.Coder;
import org.spearal.configuration.Configurable;
import org.spearal.configuration.FilteredBeanDescriptorFactory.FilteredBeanDescriptor;
import org.spearal.configuration.PropertyFactory.Property;
import org.spearal.configuration.Securizer;
/**
 * == @Spearal ==>
 * 
 * Copyright (C) 2014 Franck WOLFF & William DRAI (http://www.spearal.io)
 *
 * Licensed 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.spearal;



/**
 * @author Franck WOLFF
 */
public interface SpearalContext {

	void configure(Configurable configurable);
	void configure(Configurable configurable, boolean append);
	
// Path: src/main/java/org/spearal/configuration/CoderProvider.java
// public interface Coder {
// 		
// 	void encode(ExtendedSpearalEncoder encoder, Object value) throws IOException;
// }
// 
// Path: src/main/java/org/spearal/configuration/Configurable.java
// public interface Configurable {
// 
// }
// 
// Path: src/main/java/org/spearal/configuration/FilteredBeanDescriptorFactory.java
// public interface FilteredBeanDescriptor {
// 		
// 	String getDescription();
// 	Property[] getProperties();
// 		
// 	boolean isCacheable();
// }
// 
// Path: src/main/java/org/spearal/configuration/PropertyFactory.java
// public interface Property {
// 		
// 	String getName();
// 	Class<?> getType();
// 	Type getGenericType();
// 		
// 	boolean hasField();
// 	Field getField();
// 	boolean hasGetter();
// 	Method getGetter();
// 	boolean hasSetter();
// 	Method getSetter();
// 		
// 	Class<?> getDeclaringClass();
// 		
// 	Object init(ExtendedSpearalDecoder decoder, Object holder)
// 		throws InstantiationException, IllegalAccessException, InvocationTargetException;
// 		
// 	Object get(Object holder)
// 		throws IllegalAccessException, InvocationTargetException;
// 		
// 	void set(Object holder, Object value)
// 		throws IllegalAccessException, InvocationTargetException;
// 		
// 	boolean isAnnotationPresent(Class<? extends Annotation> annotationClass);
// 	<A extends Annotation> A getAnnotation(Class<A> annotationClass);
// 		
// 	boolean isReadOnly();
// 		
// 	public void write(ExtendedSpearalEncoder encoder, Object holder)
// 		throws IOException, IllegalAccessException, InvocationTargetException;
// 			
// 	public void read(ExtendedSpearalDecoder decoder, Object holder, int parameterizedType)
// 		throws IOException, InstantiationException, IllegalAccessException, InvocationTargetException;
// }
// 
// Path: src/main/java/org/spearal/configuration/Securizer.java
// public interface Securizer extends Configurable {
// 
// 	void checkDecodable(Type type) throws SecurityException;
// 	void checkEncodable(Class<?> cls) throws SecurityException;
// }


// Path: src/main/java/org/spearal/SpearalContext.java
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import org.spearal.configuration.CoderProvider.Coder;
import org.spearal.configuration.Configurable;
import org.spearal.configuration.FilteredBeanDescriptorFactory.FilteredBeanDescriptor;
import org.spearal.configuration.PropertyFactory.Property;
import org.spearal.configuration.Securizer;

/**
 * == @Spearal ==>
 * 
 * Copyright (C) 2014 Franck WOLFF & William DRAI (http://www.spearal.io)
 *
 * Licensed 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.spearal;



/**
 * @author Franck WOLFF
 */
public interface SpearalContext {

	void configure(Configurable configurable);
	void configure(Configurable configurable, boolean append);
	
	Securizer getSecurizer();