class DatabaseSet {

	public DatabaseSet deepCopy(Map<String, DataBase> newDBs) throws Exception {
		DatabaseSet newDataSet = new DatabaseSet();
		newDataSet.name = this.name;
		newDataSet.provider = this.provider;
		newDataSet.dbCategory = this.dbCategory;
		newDataSet.strategy = this.strategy;
		newDataSet.mgrEnabled = this.mgrEnabled;
		newDataSet.mgrReadWriteSplittingEnabled = this.mgrReadWriteSplittingEnabled;
		newDataSet.databases = new HashMap<>();
        newDataSet.databases.putAll(newDBs);

		newDataSet.initShards();
		return newDataSet;
	}

	public  DatabaseSet(String name, String provider, Map<String, DataBase> databases);
	public  DatabaseSet(String name, String provider, Map<String, DataBase> databases,boolean mgrEnabled);
	public  DatabaseSet(String name, String provider, String shardStrategy, Map<String, DataBase> databases);
	public  DatabaseSet(String name, String provider, String shardStrategy, Map<String, DataBase> databases, boolean mgrEnabled);
	public  DatabaseSet(String name, String provider, String shardStrategy, ShardingStrategy strategy, Map<String, DataBase> databases);
	public  DatabaseSet(String name, String provider, String shardStrategy, ShardingStrategy strategy, Map<String, DataBase> databases, boolean mgrEnabled);
	private  DatabaseSet();

}