// Path: src/com/eyeline/mnp/ChainStorage.java
// public class ChainStorage implements Storage{
//     private Storage[] storages;
// 
//     public ChainStorage(Storage... storages) {
//         this.storages = storages;
//     }
// 
//     @Override
//     public Mno lookup(String subscriber) {
//         for (Storage storage: storages){
//             Mno mno = null;
//             if(storage!=null) {
//                 mno = storage.lookup(subscriber);
//             }
//             if (mno!=null) return mno;
//         }
//         return null;
//     }
// 
//     @Override
//     public Mno put(Mask mask, Mno mno) {
//         Mno result = null;
//         for (Storage storage: storages) {
//             if (storage!=null) {
//                 result = storage.put(mask, mno);
//             }
//         }
//         return result;
//     }
// 
//     @Override
//     public Mno remove(Mask mask) {
//         Mno mno = null;
//         for (Storage storage: storages) {
//             if (storage!=null) {
//                 mno = storage.remove(mask);
//             }
//         }
//         return mno;
//     }
// 
//     @Override
//     public void clear() {
//         for (Storage storage: storages) {
//             if (storage!=null) {
//                 storage.clear();
//             }
//         }
//     }
// }
// 
// Path: src/com/eyeline/mnp/MasksStorage.java
// public class MasksStorage implements Storage{
// 
//     private MaskTrieMap<Mno> storage = new MaskTrieMap<>();
// 
//     @Override
//     public Mno lookup(String phone) {
//         if (phone == null) return null;
//         return storage.lookup(Mask.parse(phone));
//     }
// 
//     public Mno put(Mask mask, Mno mno) {
//         if (mask == null || mno == null) return null;
//         return storage.set(mask, mno);
//     }
// 
//     @Override
//     public Mno remove(Mask mask) {
//         if (mask == null) return null;
//         return storage.remove(mask);
//     }
// 
//     @Override
//     public void clear() {
//         storage = new MaskTrieMap<>();
//     }
// }
// 
// Path: src/com/eyeline/mnp/Storage.java
// public interface Storage {
//     /**
//      * Lookup MNO by phone number
//      * @param subscriber phone number
//      * @return mno if exists, otherwise null
//      */
//     public Mno lookup(String subscriber);
// 
//     /**
//      * Adds a new mask to mno in storage
//      * but only if mask is not exists
//      * @param mask new mask
//      * @param mno mno
//      * @return Mno – old value if present
//      */
//     public Mno put(Mask mask, Mno mno);
// 
//     /**
//      * remove mask from the storage
//      * @param mask mask
//      * @return old value
//      */
//     public Mno remove(Mask mask);
// 
//     /**
//      * clear the storage
//      */
//     public void clear();
// }


import com.eyeline.mnp.ChainStorage;
import com.eyeline.mnp.MasksStorage;
import com.eyeline.mnp.Storage;
package com.eyeline.mnp.test;


/**
 * @author Chukanov
 */
public class ChainStorageTest extends BaseStorageTest {
    @Override
    protected Storage build() {
// Path: src/com/eyeline/mnp/ChainStorage.java
// public class ChainStorage implements Storage{
//     private Storage[] storages;
// 
//     public ChainStorage(Storage... storages) {
//         this.storages = storages;
//     }
// 
//     @Override
//     public Mno lookup(String subscriber) {
//         for (Storage storage: storages){
//             Mno mno = null;
//             if(storage!=null) {
//                 mno = storage.lookup(subscriber);
//             }
//             if (mno!=null) return mno;
//         }
//         return null;
//     }
// 
//     @Override
//     public Mno put(Mask mask, Mno mno) {
//         Mno result = null;
//         for (Storage storage: storages) {
//             if (storage!=null) {
//                 result = storage.put(mask, mno);
//             }
//         }
//         return result;
//     }
// 
//     @Override
//     public Mno remove(Mask mask) {
//         Mno mno = null;
//         for (Storage storage: storages) {
//             if (storage!=null) {
//                 mno = storage.remove(mask);
//             }
//         }
//         return mno;
//     }
// 
//     @Override
//     public void clear() {
//         for (Storage storage: storages) {
//             if (storage!=null) {
//                 storage.clear();
//             }
//         }
//     }
// }
// 
// Path: src/com/eyeline/mnp/MasksStorage.java
// public class MasksStorage implements Storage{
// 
//     private MaskTrieMap<Mno> storage = new MaskTrieMap<>();
// 
//     @Override
//     public Mno lookup(String phone) {
//         if (phone == null) return null;
//         return storage.lookup(Mask.parse(phone));
//     }
// 
//     public Mno put(Mask mask, Mno mno) {
//         if (mask == null || mno == null) return null;
//         return storage.set(mask, mno);
//     }
// 
//     @Override
//     public Mno remove(Mask mask) {
//         if (mask == null) return null;
//         return storage.remove(mask);
//     }
// 
//     @Override
//     public void clear() {
//         storage = new MaskTrieMap<>();
//     }
// }
// 
// Path: src/com/eyeline/mnp/Storage.java
// public interface Storage {
//     /**
//      * Lookup MNO by phone number
//      * @param subscriber phone number
//      * @return mno if exists, otherwise null
//      */
//     public Mno lookup(String subscriber);
// 
//     /**
//      * Adds a new mask to mno in storage
//      * but only if mask is not exists
//      * @param mask new mask
//      * @param mno mno
//      * @return Mno – old value if present
//      */
//     public Mno put(Mask mask, Mno mno);
// 
//     /**
//      * remove mask from the storage
//      * @param mask mask
//      * @return old value
//      */
//     public Mno remove(Mask mask);
// 
//     /**
//      * clear the storage
//      */
//     public void clear();
// }


// Path: test/com/eyeline/mnp/test/ChainStorageTest.java
import com.eyeline.mnp.ChainStorage;
import com.eyeline.mnp.MasksStorage;
import com.eyeline.mnp.Storage;

package com.eyeline.mnp.test;


/**
 * @author Chukanov
 */
public class ChainStorageTest extends BaseStorageTest {
    @Override
    protected Storage build() {
        return new ChainStorage(new MasksStorage(), new MasksStorage());