1 /** 2 Copyright: 2017 © LLC CERERIS 3 License: MIT 4 Authors: LLC CERERIS 5 */ 6 7 module checkit.blockmanager; 8 9 import checkit.block; 10 import std.algorithm: canFind; 11 import std..string: format; 12 import std.uuid: UUID; 13 import std.variant; 14 15 /// Provide managing of blocks 16 interface BlockManagerInterface 17 { 18 public: 19 /// Add block 20 static void addBlock(T)(T block); 21 /// Remove block from storage by UUID 22 static void removeBlockByUUID(UUID uuid); 23 /// Get array of blocks by type from storage 24 static TestBlock!T[] getByType(T, alias U)(); 25 } 26 27 /// Default BlockManager for collection blocks 28 final class BlockManager: BlockManagerInterface 29 { 30 public: 31 /** Add block 32 33 Params: 34 block = Block that is added to the storage 35 36 Examples: 37 --- 38 auto scenario = new ScenarioBlock({}, "test", []); 39 BlockManager.addBlock(scenario); 40 --- 41 */ 42 static void addBlock(T)(T block) 43 { 44 _blocksMap[block.getUUID()] = block; 45 } 46 47 /** Remove block from storage by UUID 48 49 Params: 50 uuid = Unique block identifier 51 52 Examples: 53 --- 54 auto scenario = new ScenarioBlock({}, "test", []); 55 BlockManager.addBlock(scenario); 56 BlockManager.removeBlockByUUID(scenario.getUUID()); 57 --- 58 */ 59 static void removeBlockByUUID(UUID uuid) 60 { 61 _blocksMap.remove(uuid); 62 } 63 64 /** Get array of blocks by type from storage 65 66 Params: 67 T = Type of block. 68 69 Examples: 70 --- 71 auto scenario = new ScenarioBlock({}, "test", []); 72 BlockManager.addBlock(scenario); 73 BlockManager.getByType!ScenarioBlock(); 74 --- 75 */ 76 static T[] getByType(T)() 77 { 78 T[] blocks; 79 80 foreach(block; _blocksMap) 81 { 82 if(auto temp = cast(T) block) 83 { 84 blocks ~= temp; 85 } 86 } 87 88 return blocks; 89 } 90 91 private: 92 static TestBlock[UUID] _blocksMap; 93 }