public interface IStore extends IDeepCopyServiceDelegate, IStoreForGarbage
Modifier and Type | Method and Description |
---|---|
void |
addProhibitedPackage(String packageName) |
void |
addToNotCheckMethod(Class<?> clazz) |
void |
addToNotCheckMethod(Constructor<?> constructor) |
void |
addToNotCheckMethod(Method method) |
void |
addToNotCheckMethod(String objectClassName,
String absoluteMethodName) |
Collection<ClassInfo> |
allClassInformation() |
void |
autoSaveSetup(int maxInMemoryThreshold) |
ClassInfo |
classInfoOfObject(Object object) |
Class<?> |
classOfObject(Object object) |
void |
clear() |
void |
close()
close, do not save modifications
|
ObjectAndPersistInfo |
createObjectReadingInStoreOrGetExisting(DataRecordIdentifier dataRecordIdentifier,
boolean notLazy) |
Object |
deepCopy(Object sourceObject,
boolean forceLoad) |
void |
disableBackgroundGarbageSweep()
disable background garbage sweep operation
|
void |
doNotSave()
do not save the object modification, creation, and deletion on file
clear all informations on object persistence, persistent object are detached always for closing |
void |
enableBackgroundGarbageSweep(int sleepTime)
enable background garbage sweep operation
|
void |
endAccessSession()
access session is ended
|
long |
freeSize() |
int |
garbageSweep(String filePath)
garbage sweep, remove data record for object not attached to root
should be call only when all object detached, at startup or after commit |
ReferenceLink[] |
getAllReferenceLink() |
List<DataRecordIdentifierRBTNode> |
getCandidate() |
int |
getClassIdentifier(Class<?> clazz) |
ClassInfoFactory |
getClassInfoFactory() |
ClassInfo |
getClassInfoInDataRecord(DataRecordIdentifier dataRecordIdentifier) |
ClassLoaderProvider |
getClassLoaderProvider() |
IClassNameManager |
getClassNameManager() |
ConversionManager |
getConversionManager() |
int |
getCurrentDataModelIdentifier() |
long |
getCurrentFileAccessSessionIdentifier() |
IHeapDataManager |
getDataManager() |
DataRecordIdentifier |
getDataRecordIdentifierAssociatedToObject(Object object) |
GarbageManager |
getGarbageManager() |
HeapRecordableManager |
getHeapRecordableManager() |
HelperBinaryConversion |
getHelperBinaryConversion() |
LinkRecordManager |
getLinkRecordManager()
for test purpose
|
JoafipMutex |
getMutex() |
int |
getNumberOfDataRecord() |
int |
getNumberOfFreeRecord() |
int |
getNumberOfGarbageCandidate() |
int |
getNumberOfModified() |
int |
getNumberOfObjectExported() |
int |
getNumberOfObjectState() |
int |
getNumberOfReferenced() |
int |
getNumberOfToGarbage() |
int |
getNumberOfVisitedForSave() |
int |
getNumberOfWeakReference() |
List<ObjectAndPersistInfo> |
getObjectAndPersistInfoOfObjectFromQueue() |
ObjectAndPersistInfo |
getObjectAndPersistInfoOfObjectFromQueue(Object object) |
Collection<ObjectAndPersistInfo> |
getObjectHavingStateSet() |
ObjectIOManager |
getObjectIOManager() |
int |
getPersistenceId() |
ProxyManager2 |
getProxyManager2() |
Object |
getRoot() |
String |
getStorageFileName() |
Map<EnumKey,Enum<?>> |
getStoredEnumMap() |
StoreRoot4 |
getStoreRoot() |
StoreSaver3 |
getStoreSaver() |
StoreSynchro |
getStoreSynchro() |
List<DataRecordIdentifierRBTNode> |
getToGarbage() |
Set<String> |
getVisitedObjectSet() |
List<String> |
getWroteArrays() |
Map<String,MutableInteger> |
getWroteObjectSet() |
boolean |
isAutoSaveEnabled() |
boolean |
isBackgroundGarbageSweepWorking()
to know if sweeping or waiting ( may be becaus it is disabled )
|
boolean |
isChangeLogEnabled() |
boolean |
isGarbageManagement() |
boolean |
isProxyMode() |
void |
keptInMemory(String key,
Object object) |
String |
keyOfObjectKeptInMemory(Object object) |
ClassInfo |
knownAsNotExisting(String className) |
void |
listenStateMapClean(IObjectStateMapCLeanListener listener) |
void |
maintainInMemorySetup(int maintainedInMemoryQuota) |
void |
newAccessSession(boolean exclusiveAccessSession)
a new data access session is created
|
Object |
newInstance(Class<?> objectClass) |
Object |
newInstance(Class<?> objectClass,
Class<?>[] parameterTypes,
Object[] initargs) |
Object |
newInstanceNoConstruction(ClassInfo objectClassInfo) |
Object |
newProxyInstance(Class<?> objectClass) |
Object |
newProxyInstance(Class<?> objectClass,
Class<?>[] parameterTypes,
Object[] initargs) |
Object |
newProxyInstance(Object object) |
void |
open(boolean removeFiles)
open object storage management
|
boolean |
readRoot()
read root object
|
void |
referencedByPesistedStaticField(Class<?> classHavingStaticFieldReferenced) |
void |
removeWriteSubstitution(Class<?> replaced) |
void |
removeWriteSubstitution(String replacedName) |
void |
save(boolean closing,
boolean autoSave)
save the object modification, creation, and deletion on file
then clear all informations on object persistence, persistent object are detached |
void |
setAutoSaveEnabled(boolean enabled) |
void |
setAutoSaveEventListener(IAutoSaveEventListener saveEventListener) |
void |
setChangeLogEnabled(boolean enabled,
int maxNumberOfChangeLog)
set enable state of file change logging
|
void |
setClassLoaderProvider(ClassLoaderProvider classLoaderProvider) |
void |
setDeprecatedInStore(Class<?> objectClass) |
void |
setDeprecatedInStore(NavigableMap<String,Boolean> deprecatedinStoreMap) |
void |
setDeprecatedInStore(String objectClassName) |
void |
setEnumState(Enum<?> enumObject)
Deprecated.
|
void |
setExportListener(IExporterListener listener) |
void |
setForceEnhance(Class<?> objectClass)
force class to be enhanced even if have final public method
|
void |
setForceEnhance(String objectClassName) |
void |
setGarbageListener(IGarbageListener listener)
set garbage listener
|
void |
setImportListener(IImportListener listener) |
void |
setInstanceFactory(IInstanceFactory instanceFactory) |
void |
setMaintainedInMemoryEnabled(boolean enabled) |
void |
setNoLazyLoad(Class<?> objectClass)
set no use of lazy load for a class
|
void |
setNoLazyLoad(Class<?>[] objectClasses)
set no use of lazy load for the classes
|
void |
setNoLazyLoad(String objectClassName) |
void |
setNoLazyLoad(String[] objectClassNames) |
void |
setNotPersistedField(Class<?> clazz,
String[] fieldNames) |
void |
setNotPersistedField(String objectClassName,
String[] fieldNames) |
void |
setNotStorable(Class<?> objectClass) |
void |
setNotStorable(NavigableMap<String,Boolean> notStorableMap) |
void |
setNotStorable(String objectClassName) |
void |
setObjectIOForClass(Class<?> objectClass,
Class<? extends IObjectInput> objectInputClass,
Class<? extends IObjectOutput> objectOutputClass)
set object input output manager for a class
|
void |
setObjectIOForClass(String objectClassName,
Class<? extends IObjectInput> objectInputClass,
Class<? extends IObjectOutput> objectOutputClass) |
void |
setPersistenceId(int persistenceId) |
void |
setRecordSaveActions(boolean recordActions) |
void |
setRecordSaveActions(boolean recordActions,
ISaveRecordActionListener saveRecordActionListener) |
void |
setRoot(Object rootObject,
Map<EnumKey,Enum<?>> storedEnumMap)
set root object
do not save the modification |
void |
setSaveInDataAccessSessionEnabled(boolean enabled) |
void |
setSaver(IFilePersistenceAutoSaver saver) |
void |
setSaveRecordActionListener(ISaveRecordActionListener saveRecordActionListener) |
void |
setStorable(Class<?> objectClass)
mark class to be storable
|
void |
setStorable(String objectClassName) |
boolean |
setStoredEnumMap(Map<EnumKey,Enum<?>> storedEnumMap) |
void |
setStoreMode(NavigableMap<String,EnumStoreMode> storeModeMap) |
void |
setStoreNotUseStandardSerialization(Class<?> objectClass)
set not use standard serialization for a class
|
void |
setStoreNotUseStandardSerialization(String objectClassName) |
void |
setStoreOnlyMarkedStorable(boolean storeOnlyMarkedStorable) |
void |
setStoreSerializeAndGZippedInOneRecord(Class<?> objectClass)
set storage mode serialized and GZipped for a class
|
void |
setStoreSerializeAndGZippedInOneRecord(String objectClassName) |
void |
setStoreSerializeAndZippedInOneRecord(Class<?> objectClass)
set storage mode serialized and Zipped for a class
|
void |
setStoreSerializeAndZippedInOneRecord(String objectClassName) |
void |
setStoreSerializeInOneRecord(Class<?> objectClass)
set storage mode serialized for a class
|
void |
setStoreSerializeInOneRecord(String objectClassName) |
void |
setSubstituteObjectManager(Class<?> objectClass,
Class<?> substituteObjectClass,
ISubstituteObjectManager substituteObjectManager)
set substitution for object of a class writing and reading
|
void |
setSubstituteObjectManager(String objectClassName,
Class<?> substituteObjectClass,
ISubstituteObjectManager substituteObjectManager) |
void |
setSubstitutionOfJavaUtilCollection(boolean enabled)
set java util collection substitution
PVector for Vector PLinkedList for LinkedList PArrayList for ArrayList PHashSet for HashSet PLinkedHashSet for LinkedHashSet PTreeSet for TreeSet PHashMap for HashMap PLinkedHashMap for LinkedHashMap PTreeMap for TreeMap PHashMap for HashTable |
void |
setWriteSubstitution(Class<?> replaced,
Class<?> substitute,
ISubsituteSynchronizer synchronizer)
record a class substitution association
|
void |
setWriteSubstitution(String replacedName,
Class<?> substitute,
ISubsituteSynchronizer synchronizer) |
void |
setZipCompressionLevel(int zipCompressionLevel) |
void |
stop() |
void |
storedImmutableEnum(Class<? extends Enum<?>> enumClass)
declare immutable enum class to persist
|
long |
totalSize() |
void |
usedForClassNameManagement(Set<DataRecordIdentifier> setToUpdate) |
void |
usedForGarbageManagement(Set<DataRecordIdentifier> setToUpdate) |
long |
usedSize() |
void |
xmlExport(String directoryName,
String temporaryDirectoryName,
boolean exportPersistedClassByteCode)
export persisted data in file export.xml put in
directoryName |
void |
xmlImport(String directoryName,
boolean validating)
import from exported data in
directoryName |
isKeptInMemory
setBackgroundException
JoafipMutex getMutex()
getMutex
in interface IStoreForGarbage
void setChangeLogEnabled(boolean enabled, int maxNumberOfChangeLog) throws StoreException
enabled
- true if change log enabledmaxNumberOfChangeLog
- max number of state change logStoreException
void setGarbageListener(IGarbageListener listener) throws StoreException
listener
- th garbage listener, can be null to remove previous oneStoreException
void setZipCompressionLevel(int zipCompressionLevel) throws StoreException
zipCompressionLevel
- the zip the compression level for object storing using zipped
serializationStoreException
void setSubstitutionOfJavaUtilCollection(boolean enabled) throws StoreException
enabled
- StoreException
void setWriteSubstitution(Class<?> replaced, Class<?> substitute, ISubsituteSynchronizer synchronizer) throws StoreException
replaced
- the replaced classsubstitute
- the substitute for the replaced classsynchronizer
- the state synchronizer for class and its substituteStoreException
void removeWriteSubstitution(Class<?> replaced) throws StoreException
StoreException
void setWriteSubstitution(String replacedName, Class<?> substitute, ISubsituteSynchronizer synchronizer) throws StoreException
StoreException
void removeWriteSubstitution(String replacedName) throws StoreException, StoreClassNotFoundException
void setNoLazyLoad(Class<?> objectClass) throws StoreException
objectClass
- StoreException
void setNoLazyLoad(String objectClassName)
void setNoLazyLoad(Class<?>[] objectClasses) throws StoreException
objectClasses
- StoreException
void setNoLazyLoad(String[] objectClassNames)
void setStoreNotUseStandardSerialization(Class<?> objectClass) throws StoreException
objectClass
- StoreException
void setStoreNotUseStandardSerialization(String objectClassName) throws StoreException
StoreException
void setStoreSerializeAndGZippedInOneRecord(Class<?> objectClass) throws StoreException
objectClass
- StoreException
void setStoreSerializeAndGZippedInOneRecord(String objectClassName) throws StoreException
StoreException
void setStoreSerializeAndZippedInOneRecord(Class<?> objectClass) throws StoreException
objectClass
- StoreException
void setStoreSerializeAndZippedInOneRecord(String objectClassName) throws StoreException
StoreException
void setStoreSerializeInOneRecord(Class<?> objectClass) throws StoreException
objectClass
- StoreException
void setStoreSerializeInOneRecord(String objectClassName) throws StoreException
StoreException
void setStorable(Class<?> objectClass) throws StoreException
objectClass
- StoreException
void setStorable(String objectClassName) throws StoreException
StoreException
void setNotStorable(Class<?> objectClass) throws StoreException
StoreException
void setNotStorable(String objectClassName) throws StoreException
StoreException
void setNotStorable(NavigableMap<String,Boolean> notStorableMap)
void setDeprecatedInStore(Class<?> objectClass) throws StoreException
StoreException
void setDeprecatedInStore(String objectClassName) throws StoreException
StoreException
void setDeprecatedInStore(NavigableMap<String,Boolean> deprecatedinStoreMap)
void setForceEnhance(Class<?> objectClass) throws StoreException
objectClass
- StoreException
void setForceEnhance(String objectClassName)
void addProhibitedPackage(String packageName)
void addToNotCheckMethod(Class<?> clazz)
void addToNotCheckMethod(Method method)
void addToNotCheckMethod(Constructor<?> constructor)
void setObjectIOForClass(Class<?> objectClass, Class<? extends IObjectInput> objectInputClass, Class<? extends IObjectOutput> objectOutputClass) throws StoreException
objectClass
- the class for which is provide the object input outputobjectInputClass
- object input manager class for the classobjectOutputClass
- object output manager class for the classStoreException
- object I/O construction failurevoid setObjectIOForClass(String objectClassName, Class<? extends IObjectInput> objectInputClass, Class<? extends IObjectOutput> objectOutputClass) throws StoreException
StoreException
void setSubstituteObjectManager(Class<?> objectClass, Class<?> substituteObjectClass, ISubstituteObjectManager substituteObjectManager) throws StoreException
objectClass
- the class of object to substitutesubstituteObjectClass
- the substitute object classsubstituteObjectManager
- the substitute manager to useStoreException
void setSubstituteObjectManager(String objectClassName, Class<?> substituteObjectClass, ISubstituteObjectManager substituteObjectManager) throws StoreException
StoreException
void setNotPersistedField(Class<?> clazz, String[] fieldNames) throws StoreException
StoreException
void setNotPersistedField(String objectClassName, String[] fieldNames) throws StoreException
StoreException
void open(boolean removeFiles) throws StoreException, StoreClassNotFoundException
removeFiles
- true if remove files before openStoreException
StoreClassNotFoundException
void close() throws StoreException
StoreException
void clear() throws StoreException, StoreClassNotFoundException
void storedImmutableEnum(Class<? extends Enum<?>> enumClass) throws StoreException
enumClass
- StoreException
@Deprecated void setEnumState(Enum<?> enumObject) throws StoreException
enumObject
- the enum for which state must be setStoreException
boolean readRoot() throws StoreException, StoreClassNotFoundException, StoreInvalidClassException, StoreDataCorruptedException, StoreNotSerializableException
StoreException
StoreClassNotFoundException
StoreInvalidClassException
StoreDataCorruptedException
StoreNotSerializableException
Object getRoot()
boolean setStoredEnumMap(Map<EnumKey,Enum<?>> storedEnumMap)
storedEnumMap
- void setRoot(Object rootObject, Map<EnumKey,Enum<?>> storedEnumMap) throws StoreException, StoreInvalidClassException, StoreNotSerializableException, StoreClassNotFoundException, StoreDataCorruptedException
rootObject
- the root objectstoredEnumMap
- stored enum mapStoreException
StoreDataCorruptedException
StoreClassNotFoundException
StoreNotSerializableException
StoreInvalidClassException
void setAutoSaveEventListener(IAutoSaveEventListener saveEventListener)
void newAccessSession(boolean exclusiveAccessSession)
void setInstanceFactory(IInstanceFactory instanceFactory)
void endAccessSession() throws StoreException
StoreException
void save(boolean closing, boolean autoSave) throws StoreException, StoreInvalidClassException, StoreNotSerializableException, StoreClassNotFoundException, StoreDataCorruptedException, StoreTooBigForSerializationException
closing
- true if save for closingautoSave
- true if auto save callStoreException
StoreNotSerializableException
StoreInvalidClassException
StoreClassNotFoundException
StoreDataCorruptedException
StoreTooBigForSerializationException
void doNotSave() throws StoreException
StoreException
int getNumberOfDataRecord() throws StoreException
StoreException
int getNumberOfFreeRecord() throws StoreException
StoreException
long freeSize() throws StoreException
StoreException
long usedSize() throws StoreException
StoreException
long totalSize() throws StoreException
StoreException
int getNumberOfGarbageCandidate() throws StoreException
StoreException
@Fortest List<DataRecordIdentifierRBTNode> getCandidate() throws StoreException
StoreException
int getNumberOfToGarbage() throws StoreException
StoreException
@Fortest List<DataRecordIdentifierRBTNode> getToGarbage() throws StoreException
StoreException
@Fortest ReferenceLink[] getAllReferenceLink() throws StoreException
StoreException
int garbageSweep(String filePath) throws StoreException, StoreClassNotFoundException, StoreDataCorruptedException
filePath
- temporary file for data record identifier setStoreException
StoreDataCorruptedException
StoreClassNotFoundException
void enableBackgroundGarbageSweep(int sleepTime) throws StoreException
sleepTime
- sleep time between garbage sweep operationStoreException
void disableBackgroundGarbageSweep() throws StoreException
StoreException
boolean isBackgroundGarbageSweepWorking() throws StoreException
StoreException
void usedForGarbageManagement(Set<DataRecordIdentifier> setToUpdate) throws StoreException
StoreException
int getNumberOfObjectState() throws StoreException
StoreException
int getNumberOfWeakReference() throws StoreException
StoreException
int getNumberOfReferenced() throws StoreException
StoreException
@Fortest Collection<ObjectAndPersistInfo> getObjectHavingStateSet()
int getNumberOfModified() throws StoreException
StoreException
int getNumberOfVisitedForSave() throws StoreException
StoreException
String getStorageFileName() throws StoreException
StoreException
StoreSynchro getStoreSynchro()
HelperBinaryConversion getHelperBinaryConversion()
ObjectIOManager getObjectIOManager() throws StoreException
getObjectIOManager
in interface IStoreForGarbage
StoreException
StoreSaver3 getStoreSaver()
IHeapDataManager getDataManager() throws StoreException
StoreException
IClassNameManager getClassNameManager()
getClassNameManager
in interface IStoreForGarbage
int getClassIdentifier(Class<?> clazz) throws StoreException, StoreClassNotFoundException
HeapRecordableManager getHeapRecordableManager() throws StoreException
StoreException
boolean isGarbageManagement() throws StoreException
StoreException
ClassInfoFactory getClassInfoFactory()
getClassInfoFactory
in interface IDeepCopyServiceDelegate
boolean isChangeLogEnabled()
StoreRoot4 getStoreRoot() throws StoreException
StoreException
GarbageManager getGarbageManager()
getGarbageManager
in interface IStoreForGarbage
void setStoreMode(NavigableMap<String,EnumStoreMode> storeModeMap)
Object deepCopy(Object sourceObject, boolean forceLoad) throws CopierException
CopierException
void setPersistenceId(int persistenceId)
long getCurrentFileAccessSessionIdentifier()
int getCurrentDataModelIdentifier()
ConversionManager getConversionManager()
void xmlExport(String directoryName, String temporaryDirectoryName, boolean exportPersistedClassByteCode) throws StoreException, StoreClassNotFoundException, StoreInvalidClassException, StoreDataCorruptedException, StoreNotSerializableException, StoreTooBigForSerializationException
directoryName directory
also export byte code of class of persisted object
directoryName
- directory name where store exporttemporaryDirectoryName
- temporary directory name used to store temporary files while
exportingexportPersistedClassByteCode
- true if export persisted class byte codeStoreException
StoreClassNotFoundException
StoreInvalidClassException
StoreDataCorruptedException
StoreNotSerializableException
StoreTooBigForSerializationException
void setExportListener(IExporterListener listener)
int getNumberOfObjectExported()
void xmlImport(String directoryName, boolean validating) throws StoreException, StoreClassNotFoundException, StoreInvalidClassException, StoreDataCorruptedException, StoreNotSerializableException
directoryName directory
directoryName
- directory name where are stored exported data to importvalidating
- StoreException
StoreNotSerializableException
StoreDataCorruptedException
StoreInvalidClassException
StoreClassNotFoundException
void setImportListener(IImportListener listener)
Object newProxyInstance(Object object) throws StoreException
StoreException
Object newProxyInstance(Class<?> objectClass, Class<?>[] parameterTypes, Object[] initargs) throws StoreException
StoreException
Object newProxyInstance(Class<?> objectClass) throws StoreException
StoreException
void stop() throws StoreException
StoreException
void setStoreOnlyMarkedStorable(boolean storeOnlyMarkedStorable)
Collection<ClassInfo> allClassInformation()
void keptInMemory(String key, Object object) throws StoreException
StoreException
void referencedByPesistedStaticField(Class<?> classHavingStaticFieldReferenced) throws StoreException
StoreException
void setRecordSaveActions(boolean recordActions)
void setRecordSaveActions(boolean recordActions, ISaveRecordActionListener saveRecordActionListener)
void setSaveRecordActionListener(ISaveRecordActionListener saveRecordActionListener)
Map<String,MutableInteger> getWroteObjectSet()
void setClassLoaderProvider(ClassLoaderProvider classLoaderProvider)
ClassLoaderProvider getClassLoaderProvider()
ProxyManager2 getProxyManager2()
getProxyManager2
in interface IDeepCopyServiceDelegate
void setSaveInDataAccessSessionEnabled(boolean enabled)
void setMaintainedInMemoryEnabled(boolean enabled)
void maintainInMemorySetup(int maintainedInMemoryQuota)
void setAutoSaveEnabled(boolean enabled)
boolean isAutoSaveEnabled()
void autoSaveSetup(int maxInMemoryThreshold)
void setSaver(IFilePersistenceAutoSaver saver)
@Fortest LinkRecordManager getLinkRecordManager()
int getPersistenceId()
Object newInstance(Class<?> objectClass, Class<?>[] parameterTypes, Object[] initargs)
newInstance
in interface IDeepCopyServiceDelegate
objectClass
- the class of the object to createparameterTypes
- parameters type, see
Class.getConstructor(Class...)
initargs
- the construction parameters, see
Constructor.newInstance(Object...)
Object newInstance(Class<?> objectClass)
newInstance
in interface IDeepCopyServiceDelegate
Object newInstanceNoConstruction(ClassInfo objectClassInfo)
newInstanceNoConstruction
in interface IDeepCopyServiceDelegate
@Fortest DataRecordIdentifier getDataRecordIdentifierAssociatedToObject(Object object) throws StoreException
StoreException
ClassInfo getClassInfoInDataRecord(DataRecordIdentifier dataRecordIdentifier) throws StoreException
StoreException
ObjectAndPersistInfo createObjectReadingInStoreOrGetExisting(DataRecordIdentifier dataRecordIdentifier, boolean notLazy) throws StoreException, StoreClassNotFoundException, StoreInvalidClassException, StoreDataCorruptedException, StoreNotSerializableException
ClassInfo knownAsNotExisting(String className) throws StoreClassNotFoundException, StoreException
boolean isProxyMode()
Class<?> classOfObject(Object object) throws StoreException
object
- StoreException
ClassInfo classInfoOfObject(Object object) throws StoreException
StoreException
void usedForClassNameManagement(Set<DataRecordIdentifier> setToUpdate) throws StoreException
StoreException
@Fortest ObjectAndPersistInfo getObjectAndPersistInfoOfObjectFromQueue(Object object)
@Fortest List<ObjectAndPersistInfo> getObjectAndPersistInfoOfObjectFromQueue()
@Fortest void listenStateMapClean(IObjectStateMapCLeanListener listener)
Copyright © 2007-2012 Luc Peuvrier. All Rights Reserved.