/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.shardingsphere.core.yaml.swapper.impl;

import org.apache.shardingsphere.api.config.encryptor.EncryptRuleConfiguration;
import org.apache.shardingsphere.api.config.encryptor.EncryptTableRuleConfiguration;
import org.apache.shardingsphere.core.yaml.config.encrypt.YamlEncryptRuleConfiguration;
import org.apache.shardingsphere.core.yaml.config.encrypt.YamlEncryptTableRuleConfiguration;
import org.apache.shardingsphere.core.yaml.swapper.YamlSwapper;

import java.util.Map.Entry;

/**
 * Encrypt rule configuration yaml swapper.
 *
 * @author panjuan
 */
public final class EncryptRuleConfigurationYamlSwapper implements YamlSwapper<YamlEncryptRuleConfiguration, EncryptRuleConfiguration> {
    
    @Override
    public YamlEncryptRuleConfiguration swap(final EncryptRuleConfiguration encryptRuleConfiguration) {
        YamlEncryptRuleConfiguration result = new YamlEncryptRuleConfiguration();
        result.setDefaultEncryptor(new EncryptorConfigurationYamlSwapper().swap(encryptRuleConfiguration.getDefaultEncryptorConfig()));
        for (EncryptTableRuleConfiguration each : encryptRuleConfiguration.getTableRuleConfigs()) {
            result.getTables().put(each.getTable(), new EncryptTableRuleConfigurationYamlSwapper().swap(each));
        }
        return result;
    }
    
    @Override
    public EncryptRuleConfiguration swap(final YamlEncryptRuleConfiguration yamlEncryptRuleConfiguration) {
        EncryptRuleConfiguration result = new EncryptRuleConfiguration();
        if (null != yamlEncryptRuleConfiguration.getDefaultEncryptor()) {
            result.setDefaultEncryptorConfig(new EncryptorConfigurationYamlSwapper().swap(yamlEncryptRuleConfiguration.getDefaultEncryptor()));
        }
        for (Entry<String, YamlEncryptTableRuleConfiguration> entry : yamlEncryptRuleConfiguration.getTables().entrySet()) {
            YamlEncryptTableRuleConfiguration tableRuleConfig = entry.getValue();
            tableRuleConfig.setTable(entry.getKey());
            result.getTableRuleConfigs().add(new EncryptTableRuleConfigurationYamlSwapper().swap(tableRuleConfig));
        }
        return result;
    }
}

@@ -992,29 +992,26 @@
 ptor.Encrypt
-Table
+or
 RuleConfigur
@@ -1166,37 +1166,34 @@
 rypt.YamlEncrypt
-Table
+or
 RuleConfiguratio
@@ -1716,38 +1716,26 @@
     
-result.setDefaultEncryptor(new
+for (Entry%3CString,
  Enc
@@ -1732,32 +1732,36 @@
 tring, Encryptor
+Rule
 ConfigurationYam
@@ -1757,35 +1757,26 @@
 guration
-YamlSwapper().swap(
+%3E entry : 
 encryptR
@@ -1787,39 +1787,32 @@
 onfiguration.get
-Default
 EncryptorConfig(
@@ -1808,168 +1808,87 @@
 ptor
-Config()));%0A        for (EncryptTableRuleConfiguration each : encryptRuleConfiguration.getTableRuleConfigs()) %7B%0A            result.getTables().put(each.getTable
+RuleConfigs().entrySet()) %7B%0A            result.getEncryptors().put(entry.getKey
 (), 
@@ -1890,37 +1890,34 @@
 y(), new Encrypt
-Table
+or
 RuleConfiguratio
@@ -1937,19 +1937,31 @@
 ).swap(e
-ach
+ntry.getValue()
 ));%0A    
@@ -2200,236 +2200,8 @@
 ();%0A
-        if (null != yamlEncryptRuleConfiguration.getDefaultEncryptor()) %7B%0A            result.setDefaultEncryptorConfig(new EncryptorConfigurationYamlSwapper().swap(yamlEncryptRuleConfiguration.getDefaultEncryptor()));%0A        %7D%0A
     
@@ -2226,37 +2226,34 @@
 ing, YamlEncrypt
-Table
+or
 RuleConfiguratio
@@ -2295,21 +2295,25 @@
 tion.get
-Table
+Encryptor
 s().entr
@@ -2338,177 +2338,61 @@
     
-YamlEncryptTableRuleConfiguration tableRuleConfig = entry.getValue();%0A            tableRuleConfig.setTable(entry.getKey());%0A            result.getTableRuleConfigs().add(
+result.getEncryptorRuleConfigs().put(entry.getKey(), 
 new 
@@ -2402,13 +2402,10 @@
 rypt
-Table
+or
 Rule
@@ -2440,23 +2440,24 @@
 wap(
-tableRuleConfig
+entry.getValue()
 ));%0A

modify swap()