// Path: airomem-core/src/main/java/pl/setblack/airomem/core/Persistent.java
// public class Persistent<T extends Serializable> implements AutoCloseable {
// 
//     private final PersistenceController<DataRoot<T>> controller;
// 
//     private Persistent(PersistenceController<DataRoot<T>> controller) {
//         this.controller = controller;
//     }
// 
//     public static boolean exists(Path path) {
//         return Files.exists(path);
//     }
// 
//     public static <T extends Serializable> Persistent<T> load(Path path) {
//         return new Persistent<T>(PrevaylerBuilder.<DataRoot<T>>newBuilder()
//                 .withFolder(path)
//                 .build());
//     }
// 
//     public static <T extends Serializable> Persistent<T> loadOptional(Path path, Supplier<T> constructor, boolean useRoyalFoodTester) {
//         return new Persistent<T>(PrevaylerBuilder.<DataRoot<T>>newBuilder()
//                 .useSupplier(() -> new DataRoot<>(constructor.get()))
//                 .withRoyalFoodTester(useRoyalFoodTester)
//                 .withFolder(path)
//                 .build());
// 
//     }
// 
//     public static <T extends Serializable> Persistent<T> loadOptional(Path path, Supplier<T> constructor) {
//         return loadOptional(path, constructor, true);
//     }
// 
// 
//     public static <T extends Serializable> Persistent<T> create(Path path, T initial) {
//         return new Persistent<T>(PrevaylerBuilder.<DataRoot<T>>newBuilder()
//                 .useSupplier(() -> new DataRoot<>(initial))
//                 .forceOverwrite(true)
//                 .withFolder(path)
//                 .build());
//     }
// 
//     public <RESULT> RESULT query(Query<T, RESULT> query) {
//         return controller.query((dataRoot) -> query.evaluate(dataRoot.getDataObject()));
//     }
// 
//     public T readOnly() {
//         return query(t -> t);
//     }
// 
//     @Override
//     public void close() {
//         this.controller.close();
//     }
// 
//     public void shut() {
//         this.controller.shut();
//     }
// 
//     public boolean isOpen() {
//         return controller.isOpen();
//     }
// 
//     public <R> R executeAndQuery(ContextCommand<T, R> cmd) {
//         return controller.executeAndQuery((ContextCommand<DataRoot<T>, R>) ((x, ctx) -> cmd.execute(x.getDataObject(), ctx)));
//     }
// 
//     public <R> R executeAndQuery(Command<T, R> cmd) {
//         return controller.executeAndQuery((Command<DataRoot<T>, R>) (x -> cmd.execute(x.getDataObject())));
//     }
// 
//     public void execute(VoidContextCommand<T> cmd) {
//         controller.execute((VoidContextCommand<DataRoot<T>>) ((x, ctx) -> cmd.execute(x.getDataObject(), ctx)));
//     }
// 
//     public void execute(VoidCommand<T> cmd) {
//         controller.execute((VoidCommand<DataRoot<T>>) (x -> cmd.execute(x.getDataObject())));
//     }
// 
// }
// 
// Path: airomem-core/src/test/java/pl/setblack/airomem/core/StorableObject.java
// public class StorableObject implements Serializable {
// 
//     public final HashMap<String, String> internalMap;
// 
//     private transient Map<String, String> immutable;
// 
//     public StorableObject(HashMap<String, String> intenralMap) {
//         this.internalMap = intenralMap;
//         this.immutable = Collections.unmodifiableMap(intenralMap);
//     }
// 
// 
//     public synchronized Map<String, String> getImmutable() {
//         if (this.immutable == null) {
//             this.immutable = Collections.unmodifiableMap(internalMap);
//         }
//         return immutable;
//     }
// 
//     public static HashMap createTestHashMap() {
//         final HashMap<String, String> result = new HashMap<>();
//         for (int i = 0; i < 10; i++) {
//             result.put("key:" + i, "val:" + i);
//         }
//         return result;
//     }
// 
//     public static StorableObject createTestObject() {
//         return new StorableObject(createTestHashMap());
//     }
// }
// 
// Path: airomem-core/src/main/java/pl/setblack/airomem/core/disk/PersistenceDiskHelper.java
// public final class PersistenceDiskHelper {
// 
//     public static final String STORAGE_FOLDER = "prevayler";
// 
//     PersistenceDiskHelper() {
//         throw new UnsupportedOperationException("do not create util classes");
//     }
// 
//     public static String calcFolderName(final Path path) {
//         return path.toString();
//     }
// 
//     /**
//      * Check if save of given name exists.
//      */
//     public static boolean exists(Path path) {
//         return Files.exists(path);
//     }
// 
//     public static void delete(Path path) {
//         if (exists(path)) {
//             Politician.beatAroundTheBush(() -> {
//                 FileUtils.deleteDirectory(path.toFile());
//             });
//         }
//     }
// 
// 
//     public static Path calcUserPath(String folderName) {
//         final String userFolder = System.getProperty("user.home");
//         return Paths.get(userFolder, STORAGE_FOLDER, folderName).toAbsolutePath();
//     }
// 
// }


import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import pl.setblack.airomem.core.Persistent;
import pl.setblack.airomem.core.StorableObject;
import pl.setblack.airomem.core.disk.PersistenceDiskHelper;
import java.io.File;
import java.util.HashMap;
import static org.junit.Assert.*;
/*
 *  Copyright (c) Jarek Ratajski, Licensed under the Apache License, Version 2.0
 *  http://www.apache.org/licenses/LICENSE-2.0
 */
package pl.setblack.airomem.core.builders;




/**
 * @author jarek ratajski
 */
public class PersistentTest {

    private final File localFolder = new File("prevayler");

    @Before
    public void setUp() {
// Path: airomem-core/src/main/java/pl/setblack/airomem/core/Persistent.java
// public class Persistent<T extends Serializable> implements AutoCloseable {
// 
//     private final PersistenceController<DataRoot<T>> controller;
// 
//     private Persistent(PersistenceController<DataRoot<T>> controller) {
//         this.controller = controller;
//     }
// 
//     public static boolean exists(Path path) {
//         return Files.exists(path);
//     }
// 
//     public static <T extends Serializable> Persistent<T> load(Path path) {
//         return new Persistent<T>(PrevaylerBuilder.<DataRoot<T>>newBuilder()
//                 .withFolder(path)
//                 .build());
//     }
// 
//     public static <T extends Serializable> Persistent<T> loadOptional(Path path, Supplier<T> constructor, boolean useRoyalFoodTester) {
//         return new Persistent<T>(PrevaylerBuilder.<DataRoot<T>>newBuilder()
//                 .useSupplier(() -> new DataRoot<>(constructor.get()))
//                 .withRoyalFoodTester(useRoyalFoodTester)
//                 .withFolder(path)
//                 .build());
// 
//     }
// 
//     public static <T extends Serializable> Persistent<T> loadOptional(Path path, Supplier<T> constructor) {
//         return loadOptional(path, constructor, true);
//     }
// 
// 
//     public static <T extends Serializable> Persistent<T> create(Path path, T initial) {
//         return new Persistent<T>(PrevaylerBuilder.<DataRoot<T>>newBuilder()
//                 .useSupplier(() -> new DataRoot<>(initial))
//                 .forceOverwrite(true)
//                 .withFolder(path)
//                 .build());
//     }
// 
//     public <RESULT> RESULT query(Query<T, RESULT> query) {
//         return controller.query((dataRoot) -> query.evaluate(dataRoot.getDataObject()));
//     }
// 
//     public T readOnly() {
//         return query(t -> t);
//     }
// 
//     @Override
//     public void close() {
//         this.controller.close();
//     }
// 
//     public void shut() {
//         this.controller.shut();
//     }
// 
//     public boolean isOpen() {
//         return controller.isOpen();
//     }
// 
//     public <R> R executeAndQuery(ContextCommand<T, R> cmd) {
//         return controller.executeAndQuery((ContextCommand<DataRoot<T>, R>) ((x, ctx) -> cmd.execute(x.getDataObject(), ctx)));
//     }
// 
//     public <R> R executeAndQuery(Command<T, R> cmd) {
//         return controller.executeAndQuery((Command<DataRoot<T>, R>) (x -> cmd.execute(x.getDataObject())));
//     }
// 
//     public void execute(VoidContextCommand<T> cmd) {
//         controller.execute((VoidContextCommand<DataRoot<T>>) ((x, ctx) -> cmd.execute(x.getDataObject(), ctx)));
//     }
// 
//     public void execute(VoidCommand<T> cmd) {
//         controller.execute((VoidCommand<DataRoot<T>>) (x -> cmd.execute(x.getDataObject())));
//     }
// 
// }
// 
// Path: airomem-core/src/test/java/pl/setblack/airomem/core/StorableObject.java
// public class StorableObject implements Serializable {
// 
//     public final HashMap<String, String> internalMap;
// 
//     private transient Map<String, String> immutable;
// 
//     public StorableObject(HashMap<String, String> intenralMap) {
//         this.internalMap = intenralMap;
//         this.immutable = Collections.unmodifiableMap(intenralMap);
//     }
// 
// 
//     public synchronized Map<String, String> getImmutable() {
//         if (this.immutable == null) {
//             this.immutable = Collections.unmodifiableMap(internalMap);
//         }
//         return immutable;
//     }
// 
//     public static HashMap createTestHashMap() {
//         final HashMap<String, String> result = new HashMap<>();
//         for (int i = 0; i < 10; i++) {
//             result.put("key:" + i, "val:" + i);
//         }
//         return result;
//     }
// 
//     public static StorableObject createTestObject() {
//         return new StorableObject(createTestHashMap());
//     }
// }
// 
// Path: airomem-core/src/main/java/pl/setblack/airomem/core/disk/PersistenceDiskHelper.java
// public final class PersistenceDiskHelper {
// 
//     public static final String STORAGE_FOLDER = "prevayler";
// 
//     PersistenceDiskHelper() {
//         throw new UnsupportedOperationException("do not create util classes");
//     }
// 
//     public static String calcFolderName(final Path path) {
//         return path.toString();
//     }
// 
//     /**
//      * Check if save of given name exists.
//      */
//     public static boolean exists(Path path) {
//         return Files.exists(path);
//     }
// 
//     public static void delete(Path path) {
//         if (exists(path)) {
//             Politician.beatAroundTheBush(() -> {
//                 FileUtils.deleteDirectory(path.toFile());
//             });
//         }
//     }
// 
// 
//     public static Path calcUserPath(String folderName) {
//         final String userFolder = System.getProperty("user.home");
//         return Paths.get(userFolder, STORAGE_FOLDER, folderName).toAbsolutePath();
//     }
// 
// }


// Path: airomem-core/src/test/java/pl/setblack/airomem/core/builders/PersistentTest.java
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import pl.setblack.airomem.core.Persistent;
import pl.setblack.airomem.core.StorableObject;
import pl.setblack.airomem.core.disk.PersistenceDiskHelper;
import java.io.File;
import java.util.HashMap;
import static org.junit.Assert.*;

/*
 *  Copyright (c) Jarek Ratajski, Licensed under the Apache License, Version 2.0
 *  http://www.apache.org/licenses/LICENSE-2.0
 */
package pl.setblack.airomem.core.builders;




/**
 * @author jarek ratajski
 */
public class PersistentTest {

    private final File localFolder = new File("prevayler");

    @Before
    public void setUp() {
        PersistenceDiskHelper.delete(localFolder.toPath());