From 62e9d3e1fd5129fbeee7d999b534dc477deedbdf Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Fri, 30 Jun 2017 18:49:24 +0300 Subject: [PATCH] TB-65: Database schema installation service. --- .../install/ThingsboardInstallService.java | 22 ++----- .../CassandraDatabaseSchemaService.java | 59 +++++++++++++++++++ .../install/DatabaseSchemaService.java | 22 +++++++ .../install/SqlDatabaseSchemaService.java | 40 +++++++++++++ 4 files changed, 125 insertions(+), 18 deletions(-) create mode 100644 application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java create mode 100644 application/src/main/java/org/thingsboard/server/service/install/DatabaseSchemaService.java create mode 100644 application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java index 2be8342f48..d14c3b5fc5 100644 --- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java +++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java @@ -19,30 +19,22 @@ package org.thingsboard.server.install; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.ExitCodeGenerator; import org.springframework.boot.SpringApplication; import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Service; -import org.thingsboard.server.dao.cassandra.CassandraCluster; -import org.thingsboard.server.dao.cassandra.CassandraInstallCluster; -import org.thingsboard.server.install.cql.CQLStatementsParser; import org.thingsboard.server.service.component.ComponentDiscoveryService; +import org.thingsboard.server.service.install.DatabaseSchemaService; import org.thingsboard.server.service.install.SystemDataLoaderService; import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.Paths; -import java.util.List; @Service @Profile("install") @Slf4j public class ThingsboardInstallService { - private static final String SCHEMA_CQL = "schema.cql"; - @Value("${install.data_dir}") private String dataDir; @@ -50,7 +42,7 @@ public class ThingsboardInstallService { private Boolean loadDemo; @Autowired - private CassandraInstallCluster cluster; + private DatabaseSchemaService databaseSchemaService; @Autowired private ComponentDiscoveryService componentDiscoveryService; @@ -74,8 +66,7 @@ public class ThingsboardInstallService { log.info("Installing DataBase schema..."); - Path schemaFile = Paths.get(this.dataDir, SCHEMA_CQL); - loadCql(schemaFile); + databaseSchemaService.createDatabaseSchema(); log.info("Loading system data..."); @@ -101,9 +92,4 @@ public class ThingsboardInstallService { } } - private void loadCql(Path cql) throws Exception { - List statements = new CQLStatementsParser(cql).getStatements(); - statements.forEach(statement -> cluster.getSession().execute(statement)); - } - -} \ No newline at end of file +} diff --git a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java new file mode 100644 index 0000000000..f146a2702d --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java @@ -0,0 +1,59 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed 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.thingsboard.server.service.install; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Service; +import org.thingsboard.server.dao.cassandra.CassandraInstallCluster; +import org.thingsboard.server.dao.util.NoSqlDao; +import org.thingsboard.server.install.cql.CQLStatementsParser; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; + +@Service +@NoSqlDao +@Profile("install") +@Slf4j +public class CassandraDatabaseSchemaService implements DatabaseSchemaService { + + private static final String SCHEMA_CQL = "schema.cql"; + + @Value("${install.data_dir}") + private String dataDir; + + @Autowired + private CassandraInstallCluster cluster; + + @Override + public void createDatabaseSchema() throws Exception { + log.info("Installing Cassandra DataBase schema..."); + + Path schemaFile = Paths.get(this.dataDir, SCHEMA_CQL); + loadCql(schemaFile); + + } + + private void loadCql(Path cql) throws Exception { + List statements = new CQLStatementsParser(cql).getStatements(); + statements.forEach(statement -> cluster.getSession().execute(statement)); + } +} diff --git a/application/src/main/java/org/thingsboard/server/service/install/DatabaseSchemaService.java b/application/src/main/java/org/thingsboard/server/service/install/DatabaseSchemaService.java new file mode 100644 index 0000000000..c852ffd2bc --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/service/install/DatabaseSchemaService.java @@ -0,0 +1,22 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed 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.thingsboard.server.service.install; + +public interface DatabaseSchemaService { + + void createDatabaseSchema() throws Exception; + +} diff --git a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java new file mode 100644 index 0000000000..f5fad0928c --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java @@ -0,0 +1,40 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed 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.thingsboard.server.service.install; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Service; + +@Service +@Profile("install") +@Slf4j +public class SqlDatabaseSchemaService implements DatabaseSchemaService { + + @Value("${install.data_dir}") + private String dataDir; + + @Override + public void createDatabaseSchema() throws Exception { + + log.info("Installing SQL DataBase schema..."); + //TODO: + + } + +}