未验证 提交 9df8a1dc 编写于 作者: J Juan Pan(Trista) 提交者: GitHub

Create ShardingAutoTableRuleConfiguration (#5939)

* Create ShardingAutoTableRuleConfiguration

* check style
上级 91a03307
/*
* 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.sharding.api.config;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import lombok.Getter;
import lombok.Setter;
import org.apache.shardingsphere.sharding.api.config.strategy.ShardingStrategyConfiguration;
/**
* Sharding auto table rule configuration.
*
*/
@Getter
@Setter
public class ShardingAutoTableRuleConfiguration {
private final String logicTable;
private final String actualDataSources;
private ShardingStrategyConfiguration shardingStrategy;
private KeyGeneratorConfiguration keyGenerator;
public ShardingAutoTableRuleConfiguration(final String logicTable) {
this(logicTable, null);
}
public ShardingAutoTableRuleConfiguration(final String logicTable, final String actualDataSources) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(logicTable), "LogicTable is required.");
this.logicTable = logicTable;
this.actualDataSources = actualDataSources;
}
}
......@@ -33,7 +33,9 @@ import java.util.LinkedList;
public final class ShardingRuleConfiguration implements RuleConfiguration {
private Collection<ShardingTableRuleConfiguration> tables = new LinkedList<>();
private Collection<ShardingAutoTableRuleConfiguration> autoTables = new LinkedList<>();
private Collection<String> bindingTableGroups = new LinkedList<>();
private Collection<String> broadcastTables = new LinkedList<>();
......
/*
* 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.sharding.yaml.config;
import lombok.Getter;
import lombok.Setter;
import org.apache.shardingsphere.infra.yaml.config.YamlConfiguration;
/**
* Sharding auto table rule configuration for YAML.
*/
@Getter
@Setter
public final class YamlShardingAutoTableRuleConfiguration implements YamlConfiguration {
private String logicTable;
private String actualDataSources;
private YamlShardingStrategyConfiguration shardingStrategy;
private YamlKeyGeneratorConfiguration keyGenerator;
}
/*
* 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.sharding.yaml.swapper;
import com.google.common.base.Preconditions;
import org.apache.shardingsphere.infra.yaml.swapper.YamlSwapper;
import org.apache.shardingsphere.sharding.api.config.ShardingAutoTableRuleConfiguration;
import org.apache.shardingsphere.sharding.yaml.config.YamlShardingAutoTableRuleConfiguration;
/**
* Sharding auto table rule configuration YAML swapper.
*/
public final class ShardingAutoTableRuleConfigurationYamlSwapper implements YamlSwapper<YamlShardingAutoTableRuleConfiguration, ShardingAutoTableRuleConfiguration> {
private final ShardingStrategyConfigurationYamlSwapper shardingStrategyConfigurationYamlSwapper = new ShardingStrategyConfigurationYamlSwapper();
private final KeyGeneratorConfigurationYamlSwapper keyGeneratorConfigurationYamlSwapper = new KeyGeneratorConfigurationYamlSwapper();
@Override
public YamlShardingAutoTableRuleConfiguration swap(final ShardingAutoTableRuleConfiguration data) {
YamlShardingAutoTableRuleConfiguration result = new YamlShardingAutoTableRuleConfiguration();
result.setLogicTable(data.getLogicTable());
result.setActualDataSources(data.getActualDataSources());
if (null != data.getShardingStrategy()) {
result.setShardingStrategy(shardingStrategyConfigurationYamlSwapper.swap(data.getShardingStrategy()));
}
if (null != data.getKeyGenerator()) {
result.setKeyGenerator(keyGeneratorConfigurationYamlSwapper.swap(data.getKeyGenerator()));
}
return result;
}
@Override
public ShardingAutoTableRuleConfiguration swap(final YamlShardingAutoTableRuleConfiguration yamlConfiguration) {
Preconditions.checkNotNull(yamlConfiguration.getLogicTable(), "Logic table cannot be null.");
ShardingAutoTableRuleConfiguration result = new ShardingAutoTableRuleConfiguration(yamlConfiguration.getLogicTable(), yamlConfiguration.getActualDataSources());
if (null != yamlConfiguration.getShardingStrategy()) {
result.setShardingStrategy(shardingStrategyConfigurationYamlSwapper.swap(yamlConfiguration.getShardingStrategy()));
}
if (null != yamlConfiguration.getKeyGenerator()) {
result.setKeyGenerator(keyGeneratorConfigurationYamlSwapper.swap(yamlConfiguration.getKeyGenerator()));
}
return result;
}
}
/*
* 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.sharding.yaml.swapper;
import org.apache.shardingsphere.infra.yaml.swapper.YamlSwapper;
import org.apache.shardingsphere.sharding.api.config.KeyGeneratorConfiguration;
import org.apache.shardingsphere.sharding.api.config.ShardingAutoTableRuleConfiguration;
import org.apache.shardingsphere.sharding.api.config.strategy.ShardingStrategyConfiguration;
import org.apache.shardingsphere.sharding.api.config.strategy.StandardShardingStrategyConfiguration;
import org.apache.shardingsphere.sharding.yaml.config.YamlKeyGeneratorConfiguration;
import org.apache.shardingsphere.sharding.yaml.config.YamlShardingAutoTableRuleConfiguration;
import org.apache.shardingsphere.sharding.yaml.config.YamlShardingStrategyConfiguration;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentMatchers;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.lang.reflect.Field;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public final class ShardingAutoTableRuleConfigurationYamlSwapperTest {
@Mock
private ShardingStrategyConfigurationYamlSwapper shardingStrategyConfigurationYamlSwapper;
@Mock
private KeyGeneratorConfigurationYamlSwapper keyGeneratorConfigurationYamlSwapper;
private final ShardingAutoTableRuleConfigurationYamlSwapper tableRuleConfigurationYamlSwapper = new ShardingAutoTableRuleConfigurationYamlSwapper();
@Before
public void setUp() throws ReflectiveOperationException {
setSwapper("shardingStrategyConfigurationYamlSwapper", shardingStrategyConfigurationYamlSwapper);
when(shardingStrategyConfigurationYamlSwapper.swap(ArgumentMatchers.<ShardingStrategyConfiguration>any())).thenReturn(mock(YamlShardingStrategyConfiguration.class));
setSwapper("keyGeneratorConfigurationYamlSwapper", keyGeneratorConfigurationYamlSwapper);
when(keyGeneratorConfigurationYamlSwapper.swap(ArgumentMatchers.<KeyGeneratorConfiguration>any())).thenReturn(mock(YamlKeyGeneratorConfiguration.class));
}
private void setSwapper(final String swapperFieldName, final YamlSwapper swapperFieldValue) throws ReflectiveOperationException {
Field field = ShardingAutoTableRuleConfigurationYamlSwapper.class.getDeclaredField(swapperFieldName);
field.setAccessible(true);
field.set(tableRuleConfigurationYamlSwapper, swapperFieldValue);
}
@Test
public void assertSwapToYamlWithMinProperties() {
YamlShardingAutoTableRuleConfiguration actual = tableRuleConfigurationYamlSwapper.swap(new ShardingAutoTableRuleConfiguration("tbl", "ds0,ds1"));
assertThat(actual.getLogicTable(), is("tbl"));
assertThat(actual.getActualDataSources(), is("ds0,ds1"));
assertNull(actual.getShardingStrategy());
assertNull(actual.getKeyGenerator());
}
@Test
public void assertSwapToYamlWithMaxProperties() {
ShardingAutoTableRuleConfiguration shardingTableRuleConfiguration = new ShardingAutoTableRuleConfiguration("tbl", "ds0,ds1");
shardingTableRuleConfiguration.setShardingStrategy(mock(StandardShardingStrategyConfiguration.class));
shardingTableRuleConfiguration.setKeyGenerator(mock(KeyGeneratorConfiguration.class));
YamlShardingAutoTableRuleConfiguration actual = tableRuleConfigurationYamlSwapper.swap(shardingTableRuleConfiguration);
assertThat(actual.getLogicTable(), is("tbl"));
assertThat(actual.getActualDataSources(), is("ds0,ds1"));
assertNotNull(actual.getShardingStrategy());
assertNotNull(actual.getKeyGenerator());
}
@Test(expected = NullPointerException.class)
public void assertSwapToObjectWithoutLogicTable() {
new ShardingAutoTableRuleConfigurationYamlSwapper().swap(new YamlShardingAutoTableRuleConfiguration());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册