Showing
49 changed files
with
9 additions
and
4767 deletions
Too many changes to show.
To preserve performance only 49 of 103 files are displayed.
application/src/main/java/org/thingsboard/server/service/install/CassandraEntityDatabaseSchemaService.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.service.install; | |
17 | - | |
18 | -import org.springframework.context.annotation.Profile; | |
19 | -import org.springframework.stereotype.Service; | |
20 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
21 | - | |
22 | -@Service | |
23 | -@NoSqlDao | |
24 | -@Profile("install") | |
25 | -public class CassandraEntityDatabaseSchemaService extends CassandraAbstractDatabaseSchemaService | |
26 | - implements EntityDatabaseSchemaService { | |
27 | - public CassandraEntityDatabaseSchemaService() { | |
28 | - super("schema-entities.cql"); | |
29 | - } | |
30 | -} |
... | ... | @@ -116,11 +116,8 @@ dashboard: |
116 | 116 | |
117 | 117 | database: |
118 | 118 | ts_max_intervals: "${DATABASE_TS_MAX_INTERVALS:700}" # Max number of DB queries generated by single API call to fetch telemetry records |
119 | - entities: | |
120 | - type: "${DATABASE_ENTITIES_TYPE:sql}" # cassandra OR sql | |
121 | 119 | ts: |
122 | - type: "${DATABASE_TS_TYPE:sql}" # cassandra OR sql (for hybrid mode, only this value should be cassandra) | |
123 | - | |
120 | + type: "${DATABASE_TS_TYPE:sql}" # cassandra OR sql | |
124 | 121 | |
125 | 122 | # Cassandra driver configuration parameters |
126 | 123 | cassandra: | ... | ... |
application/src/test/java/org/thingsboard/server/controller/ControllerNoSqlTestSuite.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller; | |
17 | - | |
18 | -import org.cassandraunit.dataset.cql.ClassPathCQLDataSet; | |
19 | -import org.junit.ClassRule; | |
20 | -import org.junit.extensions.cpsuite.ClasspathSuite; | |
21 | -import org.junit.runner.RunWith; | |
22 | -import org.thingsboard.server.dao.CustomCassandraCQLUnit; | |
23 | - | |
24 | -import java.util.Arrays; | |
25 | - | |
26 | -@RunWith(ClasspathSuite.class) | |
27 | -@ClasspathSuite.ClassnameFilters({ | |
28 | - "org.thingsboard.server.controller.nosql.*Test"}) | |
29 | -public class ControllerNoSqlTestSuite { | |
30 | - | |
31 | - @ClassRule | |
32 | - public static CustomCassandraCQLUnit cassandraUnit = | |
33 | - new CustomCassandraCQLUnit( | |
34 | - Arrays.asList( | |
35 | - new ClassPathCQLDataSet("cassandra/schema-ts.cql", false, false), | |
36 | - new ClassPathCQLDataSet("cassandra/schema-entities.cql", false, false), | |
37 | - new ClassPathCQLDataSet("cassandra/system-data.cql", false, false), | |
38 | - new ClassPathCQLDataSet("cassandra/system-test.cql", false, false)), | |
39 | - "cassandra-test.yaml", 30000l); | |
40 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/AdminControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseAdminControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 6/28/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class AdminControllerNoSqlTest extends BaseAdminControllerTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/AssetControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseAssetControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
21 | - | |
22 | -/** | |
23 | - * Created by Valerii Sosliuk on 6/28/2017. | |
24 | - */ | |
25 | -@DaoNoSqlTest | |
26 | -public class AssetControllerNoSqlTest extends BaseAssetControllerTest { | |
27 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/AuditLogControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseAuditLogControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -@DaoNoSqlTest | |
22 | -public class AuditLogControllerNoSqlTest extends BaseAuditLogControllerTest { | |
23 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/AuthControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseAuthControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 6/28/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class AuthControllerNoSqlTest extends BaseAuthControllerTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/ComponentDescriptorControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseComponentDescriptorControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 6/28/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class ComponentDescriptorControllerNoSqlTest extends BaseComponentDescriptorControllerTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/CustomerControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseCustomerControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 6/28/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class CustomerControllerNoSqlTest extends BaseCustomerControllerTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/DashboardControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseDashboardControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 6/28/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class DashboardControllerNoSqlTest extends BaseDashboardControllerTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/DeviceControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseDeviceControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 6/28/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class DeviceControllerNoSqlTest extends BaseDeviceControllerTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/EntityViewControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseEntityViewControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Victor Basanets on 8/27/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class EntityViewControllerNoSqlTest extends BaseEntityViewControllerTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/TenantControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseTenantControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 6/28/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class TenantControllerNoSqlTest extends BaseTenantControllerTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/UserControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseUserControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 6/28/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class UserControllerNoSqlTest extends BaseUserControllerTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/WidgetTypeControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseWidgetTypeControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 6/28/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class WidgetTypeControllerNoSqlTest extends BaseWidgetTypeControllerTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/controller/nosql/WidgetsBundleControllerNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.controller.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.controller.BaseWidgetsBundleControllerTest; | |
19 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 6/28/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class WidgetsBundleControllerNoSqlTest extends BaseWidgetsBundleControllerTest { | |
26 | -} |
... | ... | @@ -20,6 +20,7 @@ import org.junit.ClassRule; |
20 | 20 | import org.junit.extensions.cpsuite.ClasspathSuite; |
21 | 21 | import org.junit.runner.RunWith; |
22 | 22 | import org.thingsboard.server.dao.CustomCassandraCQLUnit; |
23 | +import org.thingsboard.server.dao.CustomSqlUnit; | |
23 | 24 | |
24 | 25 | import java.util.Arrays; |
25 | 26 | |
... | ... | @@ -29,11 +30,15 @@ import java.util.Arrays; |
29 | 30 | public class MqttNoSqlTestSuite { |
30 | 31 | |
31 | 32 | @ClassRule |
33 | + public static CustomSqlUnit sqlUnit = new CustomSqlUnit( | |
34 | + Arrays.asList("sql/schema-entities.sql", "sql/system-data.sql"), | |
35 | + "sql/drop-all-tables.sql", | |
36 | + "nosql-test.properties"); | |
37 | + | |
38 | + @ClassRule | |
32 | 39 | public static CustomCassandraCQLUnit cassandraUnit = |
33 | 40 | new CustomCassandraCQLUnit( |
34 | 41 | Arrays.asList( |
35 | - new ClassPathCQLDataSet("cassandra/schema-ts.cql", false, false), | |
36 | - new ClassPathCQLDataSet("cassandra/schema-entities.cql", false, false), | |
37 | - new ClassPathCQLDataSet("cassandra/system-data.cql", false, false)), | |
42 | + new ClassPathCQLDataSet("cassandra/schema-ts.cql", false, false)), | |
38 | 43 | "cassandra-test.yaml", 30000l); |
39 | 44 | } | ... | ... |
application/src/test/java/org/thingsboard/server/rules/RuleEngineNoSqlTestSuite.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.rules; | |
17 | - | |
18 | -import org.cassandraunit.dataset.cql.ClassPathCQLDataSet; | |
19 | -import org.junit.ClassRule; | |
20 | -import org.junit.extensions.cpsuite.ClasspathSuite; | |
21 | -import org.junit.runner.RunWith; | |
22 | -import org.thingsboard.server.dao.CustomCassandraCQLUnit; | |
23 | -import org.thingsboard.server.dao.CustomSqlUnit; | |
24 | - | |
25 | -import java.util.Arrays; | |
26 | - | |
27 | -@RunWith(ClasspathSuite.class) | |
28 | -@ClasspathSuite.ClassnameFilters({ | |
29 | - "org.thingsboard.server.rules.flow.nosql.*Test", | |
30 | - "org.thingsboard.server.rules.lifecycle.nosql.*Test" | |
31 | -}) | |
32 | -public class RuleEngineNoSqlTestSuite { | |
33 | - | |
34 | - @ClassRule | |
35 | - public static CustomCassandraCQLUnit cassandraUnit = | |
36 | - new CustomCassandraCQLUnit( | |
37 | - Arrays.asList( | |
38 | - new ClassPathCQLDataSet("cassandra/schema-ts.cql", false, false), | |
39 | - new ClassPathCQLDataSet("cassandra/schema-entities.cql", false, false), | |
40 | - new ClassPathCQLDataSet("cassandra/system-data.cql", false, false)), | |
41 | - "cassandra-test.yaml", 30000l); | |
42 | - | |
43 | -} |
application/src/test/java/org/thingsboard/server/rules/flow/nosql/RuleEngineFlowNoSqlIntegrationTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.rules.flow.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
19 | -import org.thingsboard.server.rules.flow.AbstractRuleEngineFlowIntegrationTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 8/22/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class RuleEngineFlowNoSqlIntegrationTest extends AbstractRuleEngineFlowIntegrationTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/rules/lifecycle/nosql/RuleEngineLifecycleNoSqlIntegrationTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.rules.lifecycle.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
19 | -import org.thingsboard.server.rules.lifecycle.AbstractRuleEngineLifecycleIntegrationTest; | |
20 | - | |
21 | -/** | |
22 | - * Created by Valerii Sosliuk on 8/22/2017. | |
23 | - */ | |
24 | -@DaoNoSqlTest | |
25 | -public class RuleEngineLifecycleNoSqlIntegrationTest extends AbstractRuleEngineLifecycleIntegrationTest { | |
26 | -} |
application/src/test/java/org/thingsboard/server/system/SystemNoSqlTestSuite.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.system; | |
17 | - | |
18 | -import org.cassandraunit.dataset.cql.ClassPathCQLDataSet; | |
19 | -import org.junit.ClassRule; | |
20 | -import org.junit.extensions.cpsuite.ClasspathSuite; | |
21 | -import org.junit.runner.RunWith; | |
22 | -import org.thingsboard.server.dao.CustomCassandraCQLUnit; | |
23 | - | |
24 | -import java.util.Arrays; | |
25 | - | |
26 | -/** | |
27 | - * @author Andrew Shvayka | |
28 | - */ | |
29 | -@RunWith(ClasspathSuite.class) | |
30 | -@ClasspathSuite.ClassnameFilters({"org.thingsboard.server.system.*NoSqlTest"}) | |
31 | -public class SystemNoSqlTestSuite { | |
32 | - | |
33 | - @ClassRule | |
34 | - public static CustomCassandraCQLUnit cassandraUnit = | |
35 | - new CustomCassandraCQLUnit( | |
36 | - Arrays.asList( | |
37 | - new ClassPathCQLDataSet("cassandra/schema-ts.cql", false, false), | |
38 | - new ClassPathCQLDataSet("cassandra/schema-entities.cql", false, false), | |
39 | - new ClassPathCQLDataSet("cassandra/system-data.cql", false, false)), | |
40 | - "cassandra-test.yaml", 30000l); | |
41 | -} |
application/src/test/java/org/thingsboard/server/system/nosql/DeviceApiNoSqlTest.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.system.nosql; | |
17 | - | |
18 | -import org.thingsboard.server.dao.service.DaoNoSqlTest; | |
19 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
20 | -import org.thingsboard.server.system.BaseHttpDeviceApiTest; | |
21 | - | |
22 | -/** | |
23 | - * Created by Valerii Sosliuk on 6/27/2017. | |
24 | - */ | |
25 | -@DaoNoSqlTest | |
26 | -public class DeviceApiNoSqlTest extends BaseHttpDeviceApiTest { | |
27 | -} |
... | ... | @@ -17,6 +17,5 @@ package org.thingsboard.server.dao.util; |
17 | 17 | |
18 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | |
20 | -@ConditionalOnProperty(prefix = "database.entities", value = "type", havingValue = "sql") | |
21 | 20 | public @interface SqlDao { |
22 | 21 | } | ... | ... |
dao/src/main/java/org/thingsboard/server/dao/alarm/CassandraAlarmDao.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.alarm; | |
17 | - | |
18 | -import com.datastax.driver.core.Statement; | |
19 | -import com.datastax.driver.core.querybuilder.QueryBuilder; | |
20 | -import com.datastax.driver.core.querybuilder.Select; | |
21 | -import com.google.common.util.concurrent.Futures; | |
22 | -import com.google.common.util.concurrent.ListenableFuture; | |
23 | -import lombok.extern.slf4j.Slf4j; | |
24 | -import org.springframework.beans.factory.annotation.Autowired; | |
25 | -import org.springframework.stereotype.Component; | |
26 | -import org.thingsboard.server.common.data.EntityType; | |
27 | -import org.thingsboard.server.common.data.alarm.Alarm; | |
28 | -import org.thingsboard.server.common.data.alarm.AlarmInfo; | |
29 | -import org.thingsboard.server.common.data.alarm.AlarmQuery; | |
30 | -import org.thingsboard.server.common.data.alarm.AlarmSearchStatus; | |
31 | -import org.thingsboard.server.common.data.id.EntityId; | |
32 | -import org.thingsboard.server.common.data.id.TenantId; | |
33 | -import org.thingsboard.server.common.data.relation.EntityRelation; | |
34 | -import org.thingsboard.server.common.data.relation.RelationTypeGroup; | |
35 | -import org.thingsboard.server.dao.model.ModelConstants; | |
36 | -import org.thingsboard.server.dao.model.nosql.AlarmEntity; | |
37 | -import org.thingsboard.server.dao.nosql.CassandraAbstractModelDao; | |
38 | -import org.thingsboard.server.dao.relation.RelationDao; | |
39 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
40 | - | |
41 | -import java.util.ArrayList; | |
42 | -import java.util.List; | |
43 | -import java.util.UUID; | |
44 | - | |
45 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
46 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; | |
47 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_BY_ID_VIEW_NAME; | |
48 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_COLUMN_FAMILY_NAME; | |
49 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_ID_PROPERTY; | |
50 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_TYPE_PROPERTY; | |
51 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_TENANT_ID_PROPERTY; | |
52 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_TYPE_PROPERTY; | |
53 | - | |
54 | -@Component | |
55 | -@Slf4j | |
56 | -@NoSqlDao | |
57 | -public class CassandraAlarmDao extends CassandraAbstractModelDao<AlarmEntity, Alarm> implements AlarmDao { | |
58 | - | |
59 | - @Autowired | |
60 | - private RelationDao relationDao; | |
61 | - | |
62 | - @Override | |
63 | - protected Class<AlarmEntity> getColumnFamilyClass() { | |
64 | - return AlarmEntity.class; | |
65 | - } | |
66 | - | |
67 | - @Override | |
68 | - protected String getColumnFamilyName() { | |
69 | - return ALARM_COLUMN_FAMILY_NAME; | |
70 | - } | |
71 | - | |
72 | - protected boolean isDeleteOnSave() { | |
73 | - return false; | |
74 | - } | |
75 | - | |
76 | - @Override | |
77 | - public Alarm save(TenantId tenantId, Alarm alarm) { | |
78 | - log.debug("Save asset [{}] ", alarm); | |
79 | - return super.save(tenantId, alarm); | |
80 | - } | |
81 | - | |
82 | - @Override | |
83 | - public Boolean deleteAlarm(TenantId tenantId, Alarm alarm) { | |
84 | - Statement delete = QueryBuilder.delete().all().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, alarm.getId().getId())) | |
85 | - .and(eq(ALARM_TENANT_ID_PROPERTY, tenantId.getId())) | |
86 | - .and(eq(ALARM_ORIGINATOR_ID_PROPERTY, alarm.getOriginator().getId())) | |
87 | - .and(eq(ALARM_ORIGINATOR_TYPE_PROPERTY, alarm.getOriginator().getEntityType())) | |
88 | - .and(eq(ALARM_TYPE_PROPERTY, alarm.getType())); | |
89 | - log.debug("Remove request: {}", delete.toString()); | |
90 | - return executeWrite(tenantId, delete).wasApplied(); | |
91 | - } | |
92 | - | |
93 | - @Override | |
94 | - public ListenableFuture<Alarm> findLatestByOriginatorAndType(TenantId tenantId, EntityId originator, String type) { | |
95 | - Select select = select().from(ALARM_COLUMN_FAMILY_NAME); | |
96 | - Select.Where query = select.where(); | |
97 | - query.and(eq(ALARM_TENANT_ID_PROPERTY, tenantId.getId())); | |
98 | - query.and(eq(ALARM_ORIGINATOR_ID_PROPERTY, originator.getId())); | |
99 | - query.and(eq(ALARM_ORIGINATOR_TYPE_PROPERTY, originator.getEntityType())); | |
100 | - query.and(eq(ALARM_TYPE_PROPERTY, type)); | |
101 | - query.limit(1); | |
102 | - query.orderBy(QueryBuilder.asc(ModelConstants.ALARM_TYPE_PROPERTY), QueryBuilder.desc(ModelConstants.ID_PROPERTY)); | |
103 | - return findOneByStatementAsync(tenantId, query); | |
104 | - } | |
105 | - | |
106 | - @Override | |
107 | - public ListenableFuture<List<AlarmInfo>> findAlarms(TenantId tenantId, AlarmQuery query) { | |
108 | - log.trace("Try to find alarms by entity [{}], searchStatus [{}], status [{}] and pageLink [{}]", query.getAffectedEntityId(), query.getSearchStatus(), query.getStatus(), query.getPageLink()); | |
109 | - EntityId affectedEntity = query.getAffectedEntityId(); | |
110 | - String searchStatusName; | |
111 | - if (query.getSearchStatus() == null && query.getStatus() == null) { | |
112 | - searchStatusName = AlarmSearchStatus.ANY.name(); | |
113 | - } else if (query.getSearchStatus() != null) { | |
114 | - searchStatusName = query.getSearchStatus().name(); | |
115 | - } else { | |
116 | - searchStatusName = query.getStatus().name(); | |
117 | - } | |
118 | - String relationType = BaseAlarmService.ALARM_RELATION_PREFIX + searchStatusName; | |
119 | - ListenableFuture<List<EntityRelation>> relations = relationDao.findRelations(tenantId, affectedEntity, relationType, RelationTypeGroup.ALARM, EntityType.ALARM, query.getPageLink()); | |
120 | - return Futures.transformAsync(relations, input -> { | |
121 | - List<ListenableFuture<AlarmInfo>> alarmFutures = new ArrayList<>(input.size()); | |
122 | - for (EntityRelation relation : input) { | |
123 | - alarmFutures.add(Futures.transform( | |
124 | - findAlarmByIdAsync(tenantId, relation.getTo().getId()), | |
125 | - AlarmInfo::new)); | |
126 | - } | |
127 | - return Futures.successfulAsList(alarmFutures); | |
128 | - }); | |
129 | - } | |
130 | - | |
131 | - @Override | |
132 | - public ListenableFuture<Alarm> findAlarmByIdAsync(TenantId tenantId, UUID key) { | |
133 | - log.debug("Get alarm by id {}", key); | |
134 | - Select.Where query = select().from(ALARM_BY_ID_VIEW_NAME).where(eq(ModelConstants.ID_PROPERTY, key)); | |
135 | - query.limit(1); | |
136 | - log.trace("Execute query {}", query); | |
137 | - return findOneByStatementAsync(tenantId, query); | |
138 | - } | |
139 | -} |
dao/src/main/java/org/thingsboard/server/dao/asset/CassandraAssetDao.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.asset; | |
17 | - | |
18 | -import com.datastax.driver.core.ResultSet; | |
19 | -import com.datastax.driver.core.ResultSetFuture; | |
20 | -import com.datastax.driver.core.Statement; | |
21 | -import com.datastax.driver.core.querybuilder.Select; | |
22 | -import com.datastax.driver.mapping.Result; | |
23 | -import com.google.common.base.Function; | |
24 | -import com.google.common.util.concurrent.Futures; | |
25 | -import com.google.common.util.concurrent.ListenableFuture; | |
26 | -import lombok.extern.slf4j.Slf4j; | |
27 | -import org.springframework.stereotype.Component; | |
28 | -import org.thingsboard.server.common.data.EntitySubtype; | |
29 | -import org.thingsboard.server.common.data.EntityType; | |
30 | -import org.thingsboard.server.common.data.asset.Asset; | |
31 | -import org.thingsboard.server.common.data.id.TenantId; | |
32 | -import org.thingsboard.server.common.data.page.TextPageLink; | |
33 | -import org.thingsboard.server.dao.DaoUtil; | |
34 | -import org.thingsboard.server.dao.model.EntitySubtypeEntity; | |
35 | -import org.thingsboard.server.dao.model.nosql.AssetEntity; | |
36 | -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao; | |
37 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
38 | - | |
39 | -import javax.annotation.Nullable; | |
40 | -import java.util.ArrayList; | |
41 | -import java.util.Arrays; | |
42 | -import java.util.Collections; | |
43 | -import java.util.List; | |
44 | -import java.util.Optional; | |
45 | -import java.util.UUID; | |
46 | - | |
47 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
48 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.in; | |
49 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; | |
50 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; | |
51 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_BY_CUSTOMER_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; | |
52 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_BY_TENANT_AND_NAME_VIEW_NAME; | |
53 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; | |
54 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_BY_TENANT_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; | |
55 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_COLUMN_FAMILY_NAME; | |
56 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_CUSTOMER_ID_PROPERTY; | |
57 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_NAME_PROPERTY; | |
58 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TENANT_ID_PROPERTY; | |
59 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TYPE_PROPERTY; | |
60 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_COLUMN_FAMILY_NAME; | |
61 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_ENTITY_TYPE_PROPERTY; | |
62 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_TENANT_ID_PROPERTY; | |
63 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
64 | - | |
65 | -@Component | |
66 | -@Slf4j | |
67 | -@NoSqlDao | |
68 | -public class CassandraAssetDao extends CassandraAbstractSearchTextDao<AssetEntity, Asset> implements AssetDao { | |
69 | - | |
70 | - @Override | |
71 | - protected Class<AssetEntity> getColumnFamilyClass() { | |
72 | - return AssetEntity.class; | |
73 | - } | |
74 | - | |
75 | - @Override | |
76 | - protected String getColumnFamilyName() { | |
77 | - return ASSET_COLUMN_FAMILY_NAME; | |
78 | - } | |
79 | - | |
80 | - @Override | |
81 | - public Asset save(TenantId tenantId, Asset domain) { | |
82 | - Asset savedAsset = super.save(tenantId, domain); | |
83 | - EntitySubtype entitySubtype = new EntitySubtype(savedAsset.getTenantId(), EntityType.ASSET, savedAsset.getType()); | |
84 | - EntitySubtypeEntity entitySubtypeEntity = new EntitySubtypeEntity(entitySubtype); | |
85 | - Statement saveStatement = cluster.getMapper(EntitySubtypeEntity.class).saveQuery(entitySubtypeEntity); | |
86 | - executeWrite(tenantId, saveStatement); | |
87 | - return savedAsset; | |
88 | - } | |
89 | - | |
90 | - @Override | |
91 | - public List<Asset> findAssetsByTenantId(UUID tenantId, TextPageLink pageLink) { | |
92 | - log.debug("Try to find assets by tenantId [{}] and pageLink [{}]", tenantId, pageLink); | |
93 | - List<AssetEntity> assetEntities = findPageWithTextSearch(new TenantId(tenantId), ASSET_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
94 | - Collections.singletonList(eq(ASSET_TENANT_ID_PROPERTY, tenantId)), pageLink); | |
95 | - | |
96 | - log.trace("Found assets [{}] by tenantId [{}] and pageLink [{}]", assetEntities, tenantId, pageLink); | |
97 | - return DaoUtil.convertDataList(assetEntities); | |
98 | - } | |
99 | - | |
100 | - @Override | |
101 | - public List<Asset> findAssetsByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) { | |
102 | - log.debug("Try to find assets by tenantId [{}], type [{}] and pageLink [{}]", tenantId, type, pageLink); | |
103 | - List<AssetEntity> assetEntities = findPageWithTextSearch(new TenantId(tenantId), ASSET_BY_TENANT_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
104 | - Arrays.asList(eq(ASSET_TYPE_PROPERTY, type), | |
105 | - eq(ASSET_TENANT_ID_PROPERTY, tenantId)), pageLink); | |
106 | - log.trace("Found assets [{}] by tenantId [{}], type [{}] and pageLink [{}]", assetEntities, tenantId, type, pageLink); | |
107 | - return DaoUtil.convertDataList(assetEntities); | |
108 | - } | |
109 | - | |
110 | - public ListenableFuture<List<Asset>> findAssetsByTenantIdAndIdsAsync(UUID tenantId, List<UUID> assetIds) { | |
111 | - log.debug("Try to find assets by tenantId [{}] and asset Ids [{}]", tenantId, assetIds); | |
112 | - Select select = select().from(getColumnFamilyName()); | |
113 | - Select.Where query = select.where(); | |
114 | - query.and(eq(ASSET_TENANT_ID_PROPERTY, tenantId)); | |
115 | - query.and(in(ID_PROPERTY, assetIds)); | |
116 | - return findListByStatementAsync(new TenantId(tenantId), query); | |
117 | - } | |
118 | - | |
119 | - @Override | |
120 | - public List<Asset> findAssetsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { | |
121 | - log.debug("Try to find assets by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink); | |
122 | - List<AssetEntity> assetEntities = findPageWithTextSearch(new TenantId(tenantId), ASSET_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
123 | - Arrays.asList(eq(ASSET_CUSTOMER_ID_PROPERTY, customerId), | |
124 | - eq(ASSET_TENANT_ID_PROPERTY, tenantId)), | |
125 | - pageLink); | |
126 | - | |
127 | - log.trace("Found assets [{}] by tenantId [{}], customerId [{}] and pageLink [{}]", assetEntities, tenantId, customerId, pageLink); | |
128 | - return DaoUtil.convertDataList(assetEntities); | |
129 | - } | |
130 | - | |
131 | - @Override | |
132 | - public List<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) { | |
133 | - log.debug("Try to find assets by tenantId [{}], customerId [{}], type [{}] and pageLink [{}]", tenantId, customerId, type, pageLink); | |
134 | - List<AssetEntity> assetEntities = findPageWithTextSearch(new TenantId(tenantId), ASSET_BY_CUSTOMER_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
135 | - Arrays.asList(eq(ASSET_TYPE_PROPERTY, type), | |
136 | - eq(ASSET_CUSTOMER_ID_PROPERTY, customerId), | |
137 | - eq(ASSET_TENANT_ID_PROPERTY, tenantId)), | |
138 | - pageLink); | |
139 | - | |
140 | - log.trace("Found assets [{}] by tenantId [{}], customerId [{}], type [{}] and pageLink [{}]", assetEntities, tenantId, customerId, type, pageLink); | |
141 | - return DaoUtil.convertDataList(assetEntities); | |
142 | - } | |
143 | - | |
144 | - @Override | |
145 | - public ListenableFuture<List<Asset>> findAssetsByTenantIdAndCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> assetIds) { | |
146 | - log.debug("Try to find assets by tenantId [{}], customerId [{}] and asset Ids [{}]", tenantId, customerId, assetIds); | |
147 | - Select select = select().from(getColumnFamilyName()); | |
148 | - Select.Where query = select.where(); | |
149 | - query.and(eq(ASSET_TENANT_ID_PROPERTY, tenantId)); | |
150 | - query.and(eq(ASSET_CUSTOMER_ID_PROPERTY, customerId)); | |
151 | - query.and(in(ID_PROPERTY, assetIds)); | |
152 | - return findListByStatementAsync(new TenantId(tenantId), query); | |
153 | - } | |
154 | - | |
155 | - @Override | |
156 | - public Optional<Asset> findAssetsByTenantIdAndName(UUID tenantId, String assetName) { | |
157 | - Select select = select().from(ASSET_BY_TENANT_AND_NAME_VIEW_NAME); | |
158 | - Select.Where query = select.where(); | |
159 | - query.and(eq(ASSET_TENANT_ID_PROPERTY, tenantId)); | |
160 | - query.and(eq(ASSET_NAME_PROPERTY, assetName)); | |
161 | - AssetEntity assetEntity = (AssetEntity) findOneByStatement(new TenantId(tenantId), query); | |
162 | - return Optional.ofNullable(DaoUtil.getData(assetEntity)); | |
163 | - } | |
164 | - | |
165 | - @Override | |
166 | - public ListenableFuture<List<EntitySubtype>> findTenantAssetTypesAsync(UUID tenantId) { | |
167 | - Select select = select().from(ENTITY_SUBTYPE_COLUMN_FAMILY_NAME); | |
168 | - Select.Where query = select.where(); | |
169 | - query.and(eq(ENTITY_SUBTYPE_TENANT_ID_PROPERTY, tenantId)); | |
170 | - query.and(eq(ENTITY_SUBTYPE_ENTITY_TYPE_PROPERTY, EntityType.ASSET)); | |
171 | - query.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); | |
172 | - ResultSetFuture resultSetFuture = executeAsyncRead(new TenantId(tenantId), query); | |
173 | - return Futures.transform(resultSetFuture, new Function<ResultSet, List<EntitySubtype>>() { | |
174 | - @Nullable | |
175 | - @Override | |
176 | - public List<EntitySubtype> apply(@Nullable ResultSet resultSet) { | |
177 | - Result<EntitySubtypeEntity> result = cluster.getMapper(EntitySubtypeEntity.class).map(resultSet); | |
178 | - if (result != null) { | |
179 | - List<EntitySubtype> entitySubtypes = new ArrayList<>(); | |
180 | - result.all().forEach((entitySubtypeEntity) -> | |
181 | - entitySubtypes.add(entitySubtypeEntity.toEntitySubtype()) | |
182 | - ); | |
183 | - return entitySubtypes; | |
184 | - } else { | |
185 | - return Collections.emptyList(); | |
186 | - } | |
187 | - } | |
188 | - }); | |
189 | - } | |
190 | - | |
191 | -} |
dao/src/main/java/org/thingsboard/server/dao/attributes/CassandraBaseAttributesDao.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.attributes; | |
17 | - | |
18 | -import com.datastax.driver.core.BoundStatement; | |
19 | -import com.datastax.driver.core.PreparedStatement; | |
20 | -import com.datastax.driver.core.ResultSet; | |
21 | -import com.datastax.driver.core.Row; | |
22 | -import com.datastax.driver.core.Statement; | |
23 | -import com.datastax.driver.core.querybuilder.QueryBuilder; | |
24 | -import com.datastax.driver.core.querybuilder.Select; | |
25 | -import com.google.common.base.Function; | |
26 | -import com.google.common.util.concurrent.Futures; | |
27 | -import com.google.common.util.concurrent.ListenableFuture; | |
28 | -import lombok.extern.slf4j.Slf4j; | |
29 | -import org.springframework.stereotype.Component; | |
30 | -import org.thingsboard.server.common.data.id.EntityId; | |
31 | -import org.thingsboard.server.common.data.id.TenantId; | |
32 | -import org.thingsboard.server.common.data.kv.AttributeKvEntry; | |
33 | -import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; | |
34 | -import org.thingsboard.server.dao.model.ModelConstants; | |
35 | -import org.thingsboard.server.dao.nosql.CassandraAbstractAsyncDao; | |
36 | -import org.thingsboard.server.dao.timeseries.CassandraBaseTimeseriesDao; | |
37 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
38 | - | |
39 | -import javax.annotation.PostConstruct; | |
40 | -import javax.annotation.PreDestroy; | |
41 | -import java.util.ArrayList; | |
42 | -import java.util.Collection; | |
43 | -import java.util.List; | |
44 | -import java.util.Optional; | |
45 | -import java.util.stream.Collectors; | |
46 | - | |
47 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
48 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; | |
49 | -import static org.thingsboard.server.dao.model.ModelConstants.ATTRIBUTES_KV_CF; | |
50 | -import static org.thingsboard.server.dao.model.ModelConstants.ATTRIBUTE_KEY_COLUMN; | |
51 | -import static org.thingsboard.server.dao.model.ModelConstants.ATTRIBUTE_TYPE_COLUMN; | |
52 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_ID_COLUMN; | |
53 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_COLUMN; | |
54 | -import static org.thingsboard.server.dao.model.ModelConstants.LAST_UPDATE_TS_COLUMN; | |
55 | - | |
56 | -/** | |
57 | - * @author Andrew Shvayka | |
58 | - */ | |
59 | -@Component | |
60 | -@Slf4j | |
61 | -@NoSqlDao | |
62 | -public class CassandraBaseAttributesDao extends CassandraAbstractAsyncDao implements AttributesDao { | |
63 | - | |
64 | - private PreparedStatement saveStmt; | |
65 | - | |
66 | - @PostConstruct | |
67 | - public void init() { | |
68 | - super.startExecutor(); | |
69 | - } | |
70 | - | |
71 | - @PreDestroy | |
72 | - public void stop() { | |
73 | - super.stopExecutor(); | |
74 | - } | |
75 | - | |
76 | - @Override | |
77 | - public ListenableFuture<Optional<AttributeKvEntry>> find(TenantId tenantId, EntityId entityId, String attributeType, String attributeKey) { | |
78 | - Select.Where select = select().from(ATTRIBUTES_KV_CF) | |
79 | - .where(eq(ENTITY_TYPE_COLUMN, entityId.getEntityType())) | |
80 | - .and(eq(ENTITY_ID_COLUMN, entityId.getId())) | |
81 | - .and(eq(ATTRIBUTE_TYPE_COLUMN, attributeType)) | |
82 | - .and(eq(ATTRIBUTE_KEY_COLUMN, attributeKey)); | |
83 | - log.trace("Generated query [{}] for entityId {} and key {}", select, entityId, attributeKey); | |
84 | - return Futures.transform(executeAsyncRead(tenantId, select), (Function<? super ResultSet, ? extends Optional<AttributeKvEntry>>) input -> | |
85 | - Optional.ofNullable(convertResultToAttributesKvEntry(attributeKey, input.one())) | |
86 | - , readResultsProcessingExecutor); | |
87 | - } | |
88 | - | |
89 | - @Override | |
90 | - public ListenableFuture<List<AttributeKvEntry>> find(TenantId tenantId, EntityId entityId, String attributeType, Collection<String> attributeKeys) { | |
91 | - List<ListenableFuture<Optional<AttributeKvEntry>>> entries = new ArrayList<>(); | |
92 | - attributeKeys.forEach(attributeKey -> entries.add(find(tenantId, entityId, attributeType, attributeKey))); | |
93 | - return Futures.transform(Futures.allAsList(entries), (Function<List<Optional<AttributeKvEntry>>, ? extends List<AttributeKvEntry>>) input -> { | |
94 | - List<AttributeKvEntry> result = new ArrayList<>(); | |
95 | - input.stream().filter(opt -> opt.isPresent()).forEach(opt -> result.add(opt.get())); | |
96 | - return result; | |
97 | - }, readResultsProcessingExecutor); | |
98 | - } | |
99 | - | |
100 | - | |
101 | - @Override | |
102 | - public ListenableFuture<List<AttributeKvEntry>> findAll(TenantId tenantId, EntityId entityId, String attributeType) { | |
103 | - Select.Where select = select().from(ATTRIBUTES_KV_CF) | |
104 | - .where(eq(ENTITY_TYPE_COLUMN, entityId.getEntityType())) | |
105 | - .and(eq(ENTITY_ID_COLUMN, entityId.getId())) | |
106 | - .and(eq(ATTRIBUTE_TYPE_COLUMN, attributeType)); | |
107 | - log.trace("Generated query [{}] for entityId {} and attributeType {}", select, entityId, attributeType); | |
108 | - return Futures.transform(executeAsyncRead(tenantId, select), (Function<? super ResultSet, ? extends List<AttributeKvEntry>>) input -> | |
109 | - convertResultToAttributesKvEntryList(input) | |
110 | - , readResultsProcessingExecutor); | |
111 | - } | |
112 | - | |
113 | - @Override | |
114 | - public ListenableFuture<Void> save(TenantId tenantId, EntityId entityId, String attributeType, AttributeKvEntry attribute) { | |
115 | - BoundStatement stmt = getSaveStmt().bind(); | |
116 | - stmt.setString(0, entityId.getEntityType().name()); | |
117 | - stmt.setUUID(1, entityId.getId()); | |
118 | - stmt.setString(2, attributeType); | |
119 | - stmt.setString(3, attribute.getKey()); | |
120 | - stmt.setLong(4, attribute.getLastUpdateTs()); | |
121 | - stmt.setString(5, attribute.getStrValue().orElse(null)); | |
122 | - Optional<Boolean> booleanValue = attribute.getBooleanValue(); | |
123 | - if (booleanValue.isPresent()) { | |
124 | - stmt.setBool(6, booleanValue.get()); | |
125 | - } else { | |
126 | - stmt.setToNull(6); | |
127 | - } | |
128 | - Optional<Long> longValue = attribute.getLongValue(); | |
129 | - if (longValue.isPresent()) { | |
130 | - stmt.setLong(7, longValue.get()); | |
131 | - } else { | |
132 | - stmt.setToNull(7); | |
133 | - } | |
134 | - Optional<Double> doubleValue = attribute.getDoubleValue(); | |
135 | - if (doubleValue.isPresent()) { | |
136 | - stmt.setDouble(8, doubleValue.get()); | |
137 | - } else { | |
138 | - stmt.setToNull(8); | |
139 | - } | |
140 | - log.trace("Generated save stmt [{}] for entityId {} and attributeType {} and attribute", stmt, entityId, attributeType, attribute); | |
141 | - return getFuture(executeAsyncWrite(tenantId, stmt), rs -> null); | |
142 | - } | |
143 | - | |
144 | - @Override | |
145 | - public ListenableFuture<List<Void>> removeAll(TenantId tenantId, EntityId entityId, String attributeType, List<String> keys) { | |
146 | - List<ListenableFuture<Void>> futures = keys | |
147 | - .stream() | |
148 | - .map(key -> delete(tenantId, entityId, attributeType, key)) | |
149 | - .collect(Collectors.toList()); | |
150 | - return Futures.allAsList(futures); | |
151 | - } | |
152 | - | |
153 | - private ListenableFuture<Void> delete(TenantId tenantId, EntityId entityId, String attributeType, String key) { | |
154 | - Statement delete = QueryBuilder.delete().all().from(ModelConstants.ATTRIBUTES_KV_CF) | |
155 | - .where(eq(ENTITY_TYPE_COLUMN, entityId.getEntityType())) | |
156 | - .and(eq(ENTITY_ID_COLUMN, entityId.getId())) | |
157 | - .and(eq(ATTRIBUTE_TYPE_COLUMN, attributeType)) | |
158 | - .and(eq(ATTRIBUTE_KEY_COLUMN, key)); | |
159 | - log.debug("Remove request: {}", delete.toString()); | |
160 | - return getFuture(executeAsyncWrite(tenantId, delete), rs -> null); | |
161 | - } | |
162 | - | |
163 | - private PreparedStatement getSaveStmt() { | |
164 | - if (saveStmt == null) { | |
165 | - saveStmt = prepare("INSERT INTO " + ModelConstants.ATTRIBUTES_KV_CF + | |
166 | - "(" + ENTITY_TYPE_COLUMN + | |
167 | - "," + ENTITY_ID_COLUMN + | |
168 | - "," + ATTRIBUTE_TYPE_COLUMN + | |
169 | - "," + ATTRIBUTE_KEY_COLUMN + | |
170 | - "," + LAST_UPDATE_TS_COLUMN + | |
171 | - "," + ModelConstants.STRING_VALUE_COLUMN + | |
172 | - "," + ModelConstants.BOOLEAN_VALUE_COLUMN + | |
173 | - "," + ModelConstants.LONG_VALUE_COLUMN + | |
174 | - "," + ModelConstants.DOUBLE_VALUE_COLUMN + | |
175 | - ")" + | |
176 | - " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"); | |
177 | - } | |
178 | - return saveStmt; | |
179 | - } | |
180 | - | |
181 | - private AttributeKvEntry convertResultToAttributesKvEntry(String key, Row row) { | |
182 | - AttributeKvEntry attributeEntry = null; | |
183 | - if (row != null) { | |
184 | - long lastUpdateTs = row.get(LAST_UPDATE_TS_COLUMN, Long.class); | |
185 | - attributeEntry = new BaseAttributeKvEntry(CassandraBaseTimeseriesDao.toKvEntry(row, key), lastUpdateTs); | |
186 | - } | |
187 | - return attributeEntry; | |
188 | - } | |
189 | - | |
190 | - private List<AttributeKvEntry> convertResultToAttributesKvEntryList(ResultSet resultSet) { | |
191 | - List<Row> rows = resultSet.all(); | |
192 | - List<AttributeKvEntry> entries = new ArrayList<>(rows.size()); | |
193 | - if (!rows.isEmpty()) { | |
194 | - rows.forEach(row -> { | |
195 | - String key = row.getString(ModelConstants.ATTRIBUTE_KEY_COLUMN); | |
196 | - AttributeKvEntry kvEntry = convertResultToAttributesKvEntry(key, row); | |
197 | - if (kvEntry != null) { | |
198 | - entries.add(kvEntry); | |
199 | - } | |
200 | - }); | |
201 | - } | |
202 | - return entries; | |
203 | - } | |
204 | -} |
dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogQueryCursor.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.audit; | |
17 | - | |
18 | -import lombok.Getter; | |
19 | -import org.thingsboard.server.common.data.page.TimePageLink; | |
20 | -import org.thingsboard.server.dao.model.nosql.AuditLogEntity; | |
21 | - | |
22 | -import java.util.ArrayList; | |
23 | -import java.util.List; | |
24 | -import java.util.UUID; | |
25 | - | |
26 | -public class AuditLogQueryCursor { | |
27 | - @Getter | |
28 | - private final UUID tenantId; | |
29 | - @Getter | |
30 | - private final List<AuditLogEntity> data; | |
31 | - @Getter | |
32 | - private final TimePageLink pageLink; | |
33 | - | |
34 | - private final List<Long> partitions; | |
35 | - | |
36 | - private int partitionIndex; | |
37 | - private int currentLimit; | |
38 | - | |
39 | - public AuditLogQueryCursor(UUID tenantId, TimePageLink pageLink, List<Long> partitions) { | |
40 | - this.tenantId = tenantId; | |
41 | - this.partitions = partitions; | |
42 | - this.partitionIndex = partitions.size() - 1; | |
43 | - this.data = new ArrayList<>(); | |
44 | - this.currentLimit = pageLink.getLimit(); | |
45 | - this.pageLink = pageLink; | |
46 | - } | |
47 | - | |
48 | - public boolean hasNextPartition() { | |
49 | - return partitionIndex >= 0; | |
50 | - } | |
51 | - | |
52 | - public boolean isFull() { | |
53 | - return currentLimit <= 0; | |
54 | - } | |
55 | - | |
56 | - public long getNextPartition() { | |
57 | - long partition = partitions.get(partitionIndex); | |
58 | - partitionIndex--; | |
59 | - return partition; | |
60 | - } | |
61 | - | |
62 | - public int getCurrentLimit() { | |
63 | - return currentLimit; | |
64 | - } | |
65 | - | |
66 | - public void addData(List<AuditLogEntity> newData) { | |
67 | - currentLimit -= newData.size(); | |
68 | - data.addAll(newData); | |
69 | - } | |
70 | -} |
dao/src/main/java/org/thingsboard/server/dao/audit/CassandraAuditLogDao.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.audit; | |
17 | - | |
18 | -import com.datastax.driver.core.BoundStatement; | |
19 | -import com.datastax.driver.core.PreparedStatement; | |
20 | -import com.datastax.driver.core.ResultSet; | |
21 | -import com.datastax.driver.core.ResultSetFuture; | |
22 | -import com.datastax.driver.core.querybuilder.QueryBuilder; | |
23 | -import com.datastax.driver.core.querybuilder.Select; | |
24 | -import com.google.common.base.Function; | |
25 | -import com.google.common.util.concurrent.Futures; | |
26 | -import com.google.common.util.concurrent.ListenableFuture; | |
27 | -import lombok.extern.slf4j.Slf4j; | |
28 | -import org.springframework.beans.factory.annotation.Autowired; | |
29 | -import org.springframework.beans.factory.annotation.Value; | |
30 | -import org.springframework.core.env.Environment; | |
31 | -import org.springframework.stereotype.Component; | |
32 | -import org.thingsboard.server.common.data.audit.AuditLog; | |
33 | -import org.thingsboard.server.common.data.id.CustomerId; | |
34 | -import org.thingsboard.server.common.data.id.EntityId; | |
35 | -import org.thingsboard.server.common.data.id.TenantId; | |
36 | -import org.thingsboard.server.common.data.id.UserId; | |
37 | -import org.thingsboard.server.common.data.page.TimePageLink; | |
38 | -import org.thingsboard.server.dao.DaoUtil; | |
39 | -import org.thingsboard.server.dao.model.ModelConstants; | |
40 | -import org.thingsboard.server.dao.model.nosql.AuditLogEntity; | |
41 | -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTimeDao; | |
42 | -import org.thingsboard.server.dao.timeseries.TsPartitionDate; | |
43 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
44 | - | |
45 | -import javax.annotation.Nullable; | |
46 | -import javax.annotation.PostConstruct; | |
47 | -import javax.annotation.PreDestroy; | |
48 | -import java.time.Instant; | |
49 | -import java.time.LocalDate; | |
50 | -import java.time.LocalDateTime; | |
51 | -import java.time.ZoneOffset; | |
52 | -import java.util.ArrayList; | |
53 | -import java.util.Arrays; | |
54 | -import java.util.List; | |
55 | -import java.util.Optional; | |
56 | -import java.util.StringJoiner; | |
57 | -import java.util.UUID; | |
58 | -import java.util.concurrent.ExecutorService; | |
59 | -import java.util.concurrent.Executors; | |
60 | -import java.util.stream.Collectors; | |
61 | - | |
62 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
63 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_BY_CUSTOMER_ID_CF; | |
64 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_BY_ENTITY_ID_CF; | |
65 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_BY_TENANT_ID_CF; | |
66 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_BY_USER_ID_CF; | |
67 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_COLUMN_FAMILY_NAME; | |
68 | - | |
69 | -@Component | |
70 | -@Slf4j | |
71 | -@NoSqlDao | |
72 | -public class CassandraAuditLogDao extends CassandraAbstractSearchTimeDao<AuditLogEntity, AuditLog> implements AuditLogDao { | |
73 | - | |
74 | - private static final String INSERT_INTO = "INSERT INTO "; | |
75 | - | |
76 | - @Autowired | |
77 | - private Environment environment; | |
78 | - | |
79 | - @Override | |
80 | - protected Class<AuditLogEntity> getColumnFamilyClass() { | |
81 | - return AuditLogEntity.class; | |
82 | - } | |
83 | - | |
84 | - @Override | |
85 | - protected String getColumnFamilyName() { | |
86 | - return AUDIT_LOG_COLUMN_FAMILY_NAME; | |
87 | - } | |
88 | - | |
89 | - protected ExecutorService readResultsProcessingExecutor; | |
90 | - | |
91 | - @Value("${audit-log.by_tenant_partitioning}") | |
92 | - private String partitioning; | |
93 | - private TsPartitionDate tsFormat; | |
94 | - | |
95 | - @Value("${audit-log.default_query_period}") | |
96 | - private Integer defaultQueryPeriodInDays; | |
97 | - | |
98 | - private PreparedStatement partitionInsertStmt; | |
99 | - private PreparedStatement saveByTenantStmt; | |
100 | - private PreparedStatement saveByTenantIdAndUserIdStmt; | |
101 | - private PreparedStatement saveByTenantIdAndEntityIdStmt; | |
102 | - private PreparedStatement saveByTenantIdAndCustomerIdStmt; | |
103 | - | |
104 | - private boolean isInstall() { | |
105 | - return environment.acceptsProfiles("install"); | |
106 | - } | |
107 | - | |
108 | - @PostConstruct | |
109 | - public void init() { | |
110 | - if (!isInstall()) { | |
111 | - Optional<TsPartitionDate> partition = TsPartitionDate.parse(partitioning); | |
112 | - if (partition.isPresent()) { | |
113 | - tsFormat = partition.get(); | |
114 | - } else { | |
115 | - log.warn("Incorrect configuration of partitioning {}", partitioning); | |
116 | - throw new RuntimeException("Failed to parse partitioning property: " + partitioning + "!"); | |
117 | - } | |
118 | - } | |
119 | - readResultsProcessingExecutor = Executors.newCachedThreadPool(); | |
120 | - } | |
121 | - | |
122 | - @PreDestroy | |
123 | - public void stopExecutor() { | |
124 | - if (readResultsProcessingExecutor != null) { | |
125 | - readResultsProcessingExecutor.shutdownNow(); | |
126 | - } | |
127 | - } | |
128 | - | |
129 | - private <T> ListenableFuture<T> getFuture(ResultSetFuture future, java.util.function.Function<ResultSet, T> transformer) { | |
130 | - return Futures.transform(future, new Function<ResultSet, T>() { | |
131 | - @Nullable | |
132 | - @Override | |
133 | - public T apply(@Nullable ResultSet input) { | |
134 | - return transformer.apply(input); | |
135 | - } | |
136 | - }, readResultsProcessingExecutor); | |
137 | - } | |
138 | - | |
139 | - @Override | |
140 | - public ListenableFuture<Void> saveByTenantId(AuditLog auditLog) { | |
141 | - log.debug("Save saveByTenantId [{}] ", auditLog); | |
142 | - | |
143 | - long partition = toPartitionTs(LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli()); | |
144 | - BoundStatement stmt = getSaveByTenantStmt().bind(); | |
145 | - stmt = setSaveStmtVariables(stmt, auditLog, partition); | |
146 | - return getFuture(executeAsyncWrite(auditLog.getTenantId(), stmt), rs -> null); | |
147 | - } | |
148 | - | |
149 | - @Override | |
150 | - public ListenableFuture<Void> saveByTenantIdAndEntityId(AuditLog auditLog) { | |
151 | - log.debug("Save saveByTenantIdAndEntityId [{}] ", auditLog); | |
152 | - | |
153 | - BoundStatement stmt = getSaveByTenantIdAndEntityIdStmt().bind(); | |
154 | - stmt = setSaveStmtVariables(stmt, auditLog, -1); | |
155 | - return getFuture(executeAsyncWrite(auditLog.getTenantId(), stmt), rs -> null); | |
156 | - } | |
157 | - | |
158 | - @Override | |
159 | - public ListenableFuture<Void> saveByTenantIdAndCustomerId(AuditLog auditLog) { | |
160 | - log.debug("Save saveByTenantIdAndCustomerId [{}] ", auditLog); | |
161 | - | |
162 | - BoundStatement stmt = getSaveByTenantIdAndCustomerIdStmt().bind(); | |
163 | - stmt = setSaveStmtVariables(stmt, auditLog, -1); | |
164 | - return getFuture(executeAsyncWrite(auditLog.getTenantId(), stmt), rs -> null); | |
165 | - } | |
166 | - | |
167 | - @Override | |
168 | - public ListenableFuture<Void> saveByTenantIdAndUserId(AuditLog auditLog) { | |
169 | - log.debug("Save saveByTenantIdAndUserId [{}] ", auditLog); | |
170 | - | |
171 | - BoundStatement stmt = getSaveByTenantIdAndUserIdStmt().bind(); | |
172 | - stmt = setSaveStmtVariables(stmt, auditLog, -1); | |
173 | - return getFuture(executeAsyncWrite(auditLog.getTenantId(), stmt), rs -> null); | |
174 | - } | |
175 | - | |
176 | - private BoundStatement setSaveStmtVariables(BoundStatement stmt, AuditLog auditLog, long partition) { | |
177 | - stmt.setUUID(0, auditLog.getId().getId()) | |
178 | - .setUUID(1, auditLog.getTenantId().getId()) | |
179 | - .setUUID(2, auditLog.getCustomerId().getId()) | |
180 | - .setUUID(3, auditLog.getEntityId().getId()) | |
181 | - .setString(4, auditLog.getEntityId().getEntityType().name()) | |
182 | - .setString(5, auditLog.getEntityName()) | |
183 | - .setUUID(6, auditLog.getUserId().getId()) | |
184 | - .setString(7, auditLog.getUserName()) | |
185 | - .setString(8, auditLog.getActionType().name()) | |
186 | - .setString(9, auditLog.getActionData() != null ? auditLog.getActionData().toString() : null) | |
187 | - .setString(10, auditLog.getActionStatus().name()) | |
188 | - .setString(11, auditLog.getActionFailureDetails()); | |
189 | - if (partition > -1) { | |
190 | - stmt.setLong(12, partition); | |
191 | - } | |
192 | - return stmt; | |
193 | - } | |
194 | - | |
195 | - @Override | |
196 | - public ListenableFuture<Void> savePartitionsByTenantId(AuditLog auditLog) { | |
197 | - log.debug("Save savePartitionsByTenantId [{}] ", auditLog); | |
198 | - | |
199 | - long partition = toPartitionTs(LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli()); | |
200 | - | |
201 | - BoundStatement stmt = getPartitionInsertStmt().bind(); | |
202 | - stmt = stmt.setUUID(0, auditLog.getTenantId().getId()) | |
203 | - .setLong(1, partition); | |
204 | - return getFuture(executeAsyncWrite(auditLog.getTenantId(), stmt), rs -> null); | |
205 | - } | |
206 | - | |
207 | - private PreparedStatement getSaveByTenantStmt() { | |
208 | - if (saveByTenantStmt == null) { | |
209 | - saveByTenantStmt = getSaveByTenantIdAndCFName(ModelConstants.AUDIT_LOG_BY_TENANT_ID_CF, true); | |
210 | - } | |
211 | - return saveByTenantStmt; | |
212 | - } | |
213 | - | |
214 | - private PreparedStatement getSaveByTenantIdAndEntityIdStmt() { | |
215 | - if (saveByTenantIdAndEntityIdStmt == null) { | |
216 | - saveByTenantIdAndEntityIdStmt = getSaveByTenantIdAndCFName(ModelConstants.AUDIT_LOG_BY_ENTITY_ID_CF, false); | |
217 | - } | |
218 | - return saveByTenantIdAndEntityIdStmt; | |
219 | - } | |
220 | - | |
221 | - private PreparedStatement getSaveByTenantIdAndCustomerIdStmt() { | |
222 | - if (saveByTenantIdAndCustomerIdStmt == null) { | |
223 | - saveByTenantIdAndCustomerIdStmt = getSaveByTenantIdAndCFName(ModelConstants.AUDIT_LOG_BY_CUSTOMER_ID_CF, false); | |
224 | - } | |
225 | - return saveByTenantIdAndCustomerIdStmt; | |
226 | - } | |
227 | - | |
228 | - private PreparedStatement getSaveByTenantIdAndUserIdStmt() { | |
229 | - if (saveByTenantIdAndUserIdStmt == null) { | |
230 | - saveByTenantIdAndUserIdStmt = getSaveByTenantIdAndCFName(ModelConstants.AUDIT_LOG_BY_USER_ID_CF, false); | |
231 | - } | |
232 | - return saveByTenantIdAndUserIdStmt; | |
233 | - } | |
234 | - | |
235 | - private PreparedStatement getSaveByTenantIdAndCFName(String cfName, boolean hasPartition) { | |
236 | - List columnsList = new ArrayList(); | |
237 | - columnsList.add(ModelConstants.AUDIT_LOG_ID_PROPERTY); | |
238 | - columnsList.add(ModelConstants.AUDIT_LOG_TENANT_ID_PROPERTY); | |
239 | - columnsList.add(ModelConstants.AUDIT_LOG_CUSTOMER_ID_PROPERTY); | |
240 | - columnsList.add(ModelConstants.AUDIT_LOG_ENTITY_ID_PROPERTY); | |
241 | - columnsList.add(ModelConstants.AUDIT_LOG_ENTITY_TYPE_PROPERTY); | |
242 | - columnsList.add(ModelConstants.AUDIT_LOG_ENTITY_NAME_PROPERTY); | |
243 | - columnsList.add(ModelConstants.AUDIT_LOG_USER_ID_PROPERTY); | |
244 | - columnsList.add(ModelConstants.AUDIT_LOG_USER_NAME_PROPERTY); | |
245 | - columnsList.add(ModelConstants.AUDIT_LOG_ACTION_TYPE_PROPERTY); | |
246 | - columnsList.add(ModelConstants.AUDIT_LOG_ACTION_DATA_PROPERTY); | |
247 | - columnsList.add(ModelConstants.AUDIT_LOG_ACTION_STATUS_PROPERTY); | |
248 | - columnsList.add(ModelConstants.AUDIT_LOG_ACTION_FAILURE_DETAILS_PROPERTY); | |
249 | - if (hasPartition) { | |
250 | - columnsList.add(ModelConstants.AUDIT_LOG_PARTITION_PROPERTY); | |
251 | - } | |
252 | - StringJoiner values = new StringJoiner(","); | |
253 | - for (int i = 0; i < columnsList.size(); i++) { | |
254 | - values.add("?"); | |
255 | - } | |
256 | - String statementString = INSERT_INTO + cfName + " (" + String.join(",", columnsList) + ") VALUES (" + values.toString() + ")"; | |
257 | - return prepare(statementString); | |
258 | - } | |
259 | - | |
260 | - private PreparedStatement getPartitionInsertStmt() { | |
261 | - if (partitionInsertStmt == null) { | |
262 | - partitionInsertStmt = prepare(INSERT_INTO + ModelConstants.AUDIT_LOG_BY_TENANT_ID_PARTITIONS_CF + | |
263 | - "(" + ModelConstants.AUDIT_LOG_TENANT_ID_PROPERTY + | |
264 | - "," + ModelConstants.AUDIT_LOG_PARTITION_PROPERTY + ")" + | |
265 | - " VALUES(?, ?)"); | |
266 | - } | |
267 | - return partitionInsertStmt; | |
268 | - } | |
269 | - | |
270 | - private long toPartitionTs(long ts) { | |
271 | - LocalDateTime time = LocalDateTime.ofInstant(Instant.ofEpochMilli(ts), ZoneOffset.UTC); | |
272 | - return tsFormat.truncatedTo(time).toInstant(ZoneOffset.UTC).toEpochMilli(); | |
273 | - } | |
274 | - | |
275 | - @Override | |
276 | - public List<AuditLog> findAuditLogsByTenantIdAndEntityId(UUID tenantId, EntityId entityId, TimePageLink pageLink) { | |
277 | - log.trace("Try to find audit logs by tenant [{}], entity [{}] and pageLink [{}]", tenantId, entityId, pageLink); | |
278 | - List<AuditLogEntity> entities = findPageWithTimeSearch(new TenantId(tenantId), AUDIT_LOG_BY_ENTITY_ID_CF, | |
279 | - Arrays.asList(eq(ModelConstants.AUDIT_LOG_TENANT_ID_PROPERTY, tenantId), | |
280 | - eq(ModelConstants.AUDIT_LOG_ENTITY_TYPE_PROPERTY, entityId.getEntityType()), | |
281 | - eq(ModelConstants.AUDIT_LOG_ENTITY_ID_PROPERTY, entityId.getId())), | |
282 | - pageLink); | |
283 | - log.trace("Found audit logs by tenant [{}], entity [{}] and pageLink [{}]", tenantId, entityId, pageLink); | |
284 | - return DaoUtil.convertDataList(entities); | |
285 | - } | |
286 | - | |
287 | - @Override | |
288 | - public List<AuditLog> findAuditLogsByTenantIdAndCustomerId(UUID tenantId, CustomerId customerId, TimePageLink pageLink) { | |
289 | - log.trace("Try to find audit logs by tenant [{}], customer [{}] and pageLink [{}]", tenantId, customerId, pageLink); | |
290 | - List<AuditLogEntity> entities = findPageWithTimeSearch(new TenantId(tenantId), AUDIT_LOG_BY_CUSTOMER_ID_CF, | |
291 | - Arrays.asList(eq(ModelConstants.AUDIT_LOG_TENANT_ID_PROPERTY, tenantId), | |
292 | - eq(ModelConstants.AUDIT_LOG_CUSTOMER_ID_PROPERTY, customerId.getId())), | |
293 | - pageLink); | |
294 | - log.trace("Found audit logs by tenant [{}], customer [{}] and pageLink [{}]", tenantId, customerId, pageLink); | |
295 | - return DaoUtil.convertDataList(entities); | |
296 | - } | |
297 | - | |
298 | - @Override | |
299 | - public List<AuditLog> findAuditLogsByTenantIdAndUserId(UUID tenantId, UserId userId, TimePageLink pageLink) { | |
300 | - log.trace("Try to find audit logs by tenant [{}], user [{}] and pageLink [{}]", tenantId, userId, pageLink); | |
301 | - List<AuditLogEntity> entities = findPageWithTimeSearch(new TenantId(tenantId), AUDIT_LOG_BY_USER_ID_CF, | |
302 | - Arrays.asList(eq(ModelConstants.AUDIT_LOG_TENANT_ID_PROPERTY, tenantId), | |
303 | - eq(ModelConstants.AUDIT_LOG_USER_ID_PROPERTY, userId.getId())), | |
304 | - pageLink); | |
305 | - log.trace("Found audit logs by tenant [{}], user [{}] and pageLink [{}]", tenantId, userId, pageLink); | |
306 | - return DaoUtil.convertDataList(entities); | |
307 | - } | |
308 | - | |
309 | - @Override | |
310 | - public List<AuditLog> findAuditLogsByTenantId(UUID tenantId, TimePageLink pageLink) { | |
311 | - log.trace("Try to find audit logs by tenant [{}] and pageLink [{}]", tenantId, pageLink); | |
312 | - | |
313 | - long minPartition; | |
314 | - if (pageLink.getStartTime() != null && pageLink.getStartTime() != 0) { | |
315 | - minPartition = toPartitionTs(pageLink.getStartTime()); | |
316 | - } else { | |
317 | - minPartition = toPartitionTs(LocalDate.now().minusDays(defaultQueryPeriodInDays).atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli()); | |
318 | - } | |
319 | - | |
320 | - long maxPartition; | |
321 | - if (pageLink.getEndTime() != null && pageLink.getEndTime() != 0) { | |
322 | - maxPartition = toPartitionTs(pageLink.getEndTime()); | |
323 | - } else { | |
324 | - maxPartition = toPartitionTs(LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli()); | |
325 | - } | |
326 | - | |
327 | - List<Long> partitions = fetchPartitions(tenantId, minPartition, maxPartition) | |
328 | - .all() | |
329 | - .stream() | |
330 | - .map(row -> row.getLong(ModelConstants.PARTITION_COLUMN)) | |
331 | - .collect(Collectors.toList()); | |
332 | - | |
333 | - AuditLogQueryCursor cursor = new AuditLogQueryCursor(tenantId, pageLink, partitions); | |
334 | - List<AuditLogEntity> entities = fetchSequentiallyWithLimit(cursor); | |
335 | - log.trace("Found audit logs by tenant [{}] and pageLink [{}]", tenantId, pageLink); | |
336 | - return DaoUtil.convertDataList(entities); | |
337 | - } | |
338 | - | |
339 | - private List<AuditLogEntity> fetchSequentiallyWithLimit(AuditLogQueryCursor cursor) { | |
340 | - if (cursor.isFull() || !cursor.hasNextPartition()) { | |
341 | - return cursor.getData(); | |
342 | - } else { | |
343 | - cursor.addData(findPageWithTimeSearch(new TenantId(cursor.getTenantId()), AUDIT_LOG_BY_TENANT_ID_CF, | |
344 | - Arrays.asList(eq(ModelConstants.AUDIT_LOG_TENANT_ID_PROPERTY, cursor.getTenantId()), | |
345 | - eq(ModelConstants.AUDIT_LOG_PARTITION_PROPERTY, cursor.getNextPartition())), | |
346 | - cursor.getPageLink())); | |
347 | - return fetchSequentiallyWithLimit(cursor); | |
348 | - } | |
349 | - } | |
350 | - | |
351 | - private ResultSet fetchPartitions(UUID tenantId, long minPartition, long maxPartition) { | |
352 | - Select.Where select = QueryBuilder.select(ModelConstants.AUDIT_LOG_PARTITION_PROPERTY).from(ModelConstants.AUDIT_LOG_BY_TENANT_ID_PARTITIONS_CF) | |
353 | - .where(eq(ModelConstants.AUDIT_LOG_TENANT_ID_PROPERTY, tenantId)); | |
354 | - select.and(QueryBuilder.gte(ModelConstants.PARTITION_COLUMN, minPartition)); | |
355 | - select.and(QueryBuilder.lte(ModelConstants.PARTITION_COLUMN, maxPartition)); | |
356 | - return executeRead(new TenantId(tenantId), select); | |
357 | - } | |
358 | - | |
359 | -} |
dao/src/main/java/org/thingsboard/server/dao/component/CassandraBaseComponentDescriptorDao.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.component; | |
17 | - | |
18 | -import com.datastax.driver.core.ResultSet; | |
19 | -import com.datastax.driver.core.Statement; | |
20 | -import com.datastax.driver.core.querybuilder.QueryBuilder; | |
21 | -import com.datastax.driver.core.querybuilder.Select; | |
22 | -import com.datastax.driver.core.utils.UUIDs; | |
23 | -import lombok.extern.slf4j.Slf4j; | |
24 | -import org.springframework.stereotype.Component; | |
25 | -import org.thingsboard.server.common.data.id.ComponentDescriptorId; | |
26 | -import org.thingsboard.server.common.data.id.TenantId; | |
27 | -import org.thingsboard.server.common.data.page.TextPageLink; | |
28 | -import org.thingsboard.server.common.data.plugin.ComponentDescriptor; | |
29 | -import org.thingsboard.server.common.data.plugin.ComponentScope; | |
30 | -import org.thingsboard.server.common.data.plugin.ComponentType; | |
31 | -import org.thingsboard.server.dao.DaoUtil; | |
32 | -import org.thingsboard.server.dao.model.ModelConstants; | |
33 | -import org.thingsboard.server.dao.model.nosql.ComponentDescriptorEntity; | |
34 | -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao; | |
35 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
36 | - | |
37 | -import java.util.Arrays; | |
38 | -import java.util.List; | |
39 | -import java.util.Optional; | |
40 | -import java.util.UUID; | |
41 | - | |
42 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
43 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; | |
44 | - | |
45 | -/** | |
46 | - * @author Andrew Shvayka | |
47 | - */ | |
48 | -@Component | |
49 | -@Slf4j | |
50 | -@NoSqlDao | |
51 | -public class CassandraBaseComponentDescriptorDao extends CassandraAbstractSearchTextDao<ComponentDescriptorEntity, ComponentDescriptor> implements ComponentDescriptorDao { | |
52 | - | |
53 | - public static final String SEARCH_RESULT = "Search result: [{}]"; | |
54 | - | |
55 | - @Override | |
56 | - protected Class<ComponentDescriptorEntity> getColumnFamilyClass() { | |
57 | - return ComponentDescriptorEntity.class; | |
58 | - } | |
59 | - | |
60 | - @Override | |
61 | - protected String getColumnFamilyName() { | |
62 | - return ModelConstants.COMPONENT_DESCRIPTOR_COLUMN_FAMILY_NAME; | |
63 | - } | |
64 | - | |
65 | - @Override | |
66 | - public Optional<ComponentDescriptor> saveIfNotExist(TenantId tenantId, ComponentDescriptor component) { | |
67 | - ComponentDescriptorEntity entity = new ComponentDescriptorEntity(component); | |
68 | - log.debug("Save component entity [{}]", entity); | |
69 | - Optional<ComponentDescriptor> result = saveIfNotExist(tenantId, entity); | |
70 | - if (log.isTraceEnabled()) { | |
71 | - log.trace("Saved result: [{}] for component entity [{}]", result.isPresent(), result.orElse(null)); | |
72 | - } else { | |
73 | - log.debug("Saved result: [{}]", result.isPresent()); | |
74 | - } | |
75 | - return result; | |
76 | - } | |
77 | - | |
78 | - @Override | |
79 | - public ComponentDescriptor findById(TenantId tenantId, ComponentDescriptorId componentId) { | |
80 | - log.debug("Search component entity by id [{}]", componentId); | |
81 | - ComponentDescriptor componentDescriptor = super.findById(tenantId, componentId.getId()); | |
82 | - if (log.isTraceEnabled()) { | |
83 | - log.trace("Search result: [{}] for component entity [{}]", componentDescriptor != null, componentDescriptor); | |
84 | - } else { | |
85 | - log.debug(SEARCH_RESULT, componentDescriptor != null); | |
86 | - } | |
87 | - return componentDescriptor; | |
88 | - } | |
89 | - | |
90 | - @Override | |
91 | - public ComponentDescriptor findByClazz(TenantId tenantId, String clazz) { | |
92 | - log.debug("Search component entity by clazz [{}]", clazz); | |
93 | - Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY, clazz)); | |
94 | - log.trace("Execute query [{}]", query); | |
95 | - ComponentDescriptorEntity entity = findOneByStatement(tenantId, query); | |
96 | - if (log.isTraceEnabled()) { | |
97 | - log.trace("Search result: [{}] for component entity [{}]", entity != null, entity); | |
98 | - } else { | |
99 | - log.debug(SEARCH_RESULT, entity != null); | |
100 | - } | |
101 | - return DaoUtil.getData(entity); | |
102 | - } | |
103 | - | |
104 | - @Override | |
105 | - public List<ComponentDescriptor> findByTypeAndPageLink(TenantId tenantId, ComponentType type, TextPageLink pageLink) { | |
106 | - log.debug("Try to find component by type [{}] and pageLink [{}]", type, pageLink); | |
107 | - List<ComponentDescriptorEntity> entities = findPageWithTextSearch(tenantId, ModelConstants.COMPONENT_DESCRIPTOR_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
108 | - Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type)), pageLink); | |
109 | - if (log.isTraceEnabled()) { | |
110 | - log.trace(SEARCH_RESULT, Arrays.toString(entities.toArray())); | |
111 | - } else { | |
112 | - log.debug(SEARCH_RESULT, entities.size()); | |
113 | - } | |
114 | - return DaoUtil.convertDataList(entities); | |
115 | - } | |
116 | - | |
117 | - @Override | |
118 | - public List<ComponentDescriptor> findByScopeAndTypeAndPageLink(TenantId tenantId, ComponentScope scope, ComponentType type, TextPageLink pageLink) { | |
119 | - log.debug("Try to find component by scope [{}] and type [{}] and pageLink [{}]", scope, type, pageLink); | |
120 | - List<ComponentDescriptorEntity> entities = findPageWithTextSearch(tenantId, ModelConstants.COMPONENT_DESCRIPTOR_BY_SCOPE_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
121 | - Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type), | |
122 | - eq(ModelConstants.COMPONENT_DESCRIPTOR_SCOPE_PROPERTY, scope.name())), pageLink); | |
123 | - if (log.isTraceEnabled()) { | |
124 | - log.trace(SEARCH_RESULT, Arrays.toString(entities.toArray())); | |
125 | - } else { | |
126 | - log.debug(SEARCH_RESULT, entities.size()); | |
127 | - } | |
128 | - return DaoUtil.convertDataList(entities); | |
129 | - } | |
130 | - | |
131 | - public boolean removeById(TenantId tenantId, UUID key) { | |
132 | - Statement delete = QueryBuilder.delete().all().from(ModelConstants.COMPONENT_DESCRIPTOR_BY_ID).where(eq(ModelConstants.ID_PROPERTY, key)); | |
133 | - log.debug("Remove request: {}", delete.toString()); | |
134 | - return executeWrite(tenantId, delete).wasApplied(); | |
135 | - } | |
136 | - | |
137 | - @Override | |
138 | - public void deleteById(TenantId tenantId, ComponentDescriptorId id) { | |
139 | - log.debug("Delete plugin meta-data entity by id [{}]", id); | |
140 | - boolean result = removeById(tenantId, id.getId()); | |
141 | - log.debug("Delete result: [{}]", result); | |
142 | - } | |
143 | - | |
144 | - @Override | |
145 | - public void deleteByClazz(TenantId tenantId, String clazz) { | |
146 | - log.debug("Delete plugin meta-data entity by id [{}]", clazz); | |
147 | - Statement delete = QueryBuilder.delete().all().from(getColumnFamilyName()).where(eq(ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY, clazz)); | |
148 | - log.debug("Remove request: {}", delete.toString()); | |
149 | - ResultSet resultSet = executeWrite(tenantId, delete); | |
150 | - log.debug("Delete result: [{}]", resultSet.wasApplied()); | |
151 | - } | |
152 | - | |
153 | - private Optional<ComponentDescriptor> saveIfNotExist(TenantId tenantId, ComponentDescriptorEntity entity) { | |
154 | - if (entity.getId() == null) { | |
155 | - entity.setId(UUIDs.timeBased()); | |
156 | - } | |
157 | - | |
158 | - ResultSet rs = executeRead(tenantId, QueryBuilder.insertInto(getColumnFamilyName()) | |
159 | - .value(ModelConstants.ID_PROPERTY, entity.getId()) | |
160 | - .value(ModelConstants.COMPONENT_DESCRIPTOR_NAME_PROPERTY, entity.getName()) | |
161 | - .value(ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY, entity.getClazz()) | |
162 | - .value(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, entity.getType()) | |
163 | - .value(ModelConstants.COMPONENT_DESCRIPTOR_SCOPE_PROPERTY, entity.getScope()) | |
164 | - .value(ModelConstants.COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY, entity.getConfigurationDescriptor()) | |
165 | - .value(ModelConstants.COMPONENT_DESCRIPTOR_ACTIONS_PROPERTY, entity.getActions()) | |
166 | - .value(ModelConstants.SEARCH_TEXT_PROPERTY, entity.getSearchText()) | |
167 | - .ifNotExists() | |
168 | - ); | |
169 | - if (rs.wasApplied()) { | |
170 | - return Optional.of(DaoUtil.getData(entity)); | |
171 | - } else { | |
172 | - return Optional.empty(); | |
173 | - } | |
174 | - } | |
175 | -} |
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.customer; | |
17 | - | |
18 | -import com.datastax.driver.core.querybuilder.Select; | |
19 | -import lombok.extern.slf4j.Slf4j; | |
20 | -import org.springframework.stereotype.Component; | |
21 | -import org.thingsboard.server.common.data.Customer; | |
22 | -import org.thingsboard.server.common.data.id.TenantId; | |
23 | -import org.thingsboard.server.common.data.page.TextPageLink; | |
24 | -import org.thingsboard.server.dao.DaoUtil; | |
25 | -import org.thingsboard.server.dao.model.ModelConstants; | |
26 | -import org.thingsboard.server.dao.model.nosql.CustomerEntity; | |
27 | -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao; | |
28 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
29 | - | |
30 | -import java.util.Arrays; | |
31 | -import java.util.List; | |
32 | -import java.util.Optional; | |
33 | -import java.util.UUID; | |
34 | - | |
35 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
36 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; | |
37 | -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_BY_TENANT_AND_TITLE_VIEW_NAME; | |
38 | -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TENANT_ID_PROPERTY; | |
39 | -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TITLE_PROPERTY; | |
40 | - | |
41 | -@Component | |
42 | -@Slf4j | |
43 | -@NoSqlDao | |
44 | -public class CassandraCustomerDao extends CassandraAbstractSearchTextDao<CustomerEntity, Customer> implements CustomerDao { | |
45 | - | |
46 | - @Override | |
47 | - protected Class<CustomerEntity> getColumnFamilyClass() { | |
48 | - return CustomerEntity.class; | |
49 | - } | |
50 | - | |
51 | - @Override | |
52 | - protected String getColumnFamilyName() { | |
53 | - return ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME; | |
54 | - } | |
55 | - | |
56 | - @Override | |
57 | - public List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) { | |
58 | - log.debug("Try to find customers by tenantId [{}] and pageLink [{}]", tenantId, pageLink); | |
59 | - List<CustomerEntity> customerEntities = findPageWithTextSearch(new TenantId(tenantId), ModelConstants.CUSTOMER_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
60 | - Arrays.asList(eq(ModelConstants.CUSTOMER_TENANT_ID_PROPERTY, tenantId)), | |
61 | - pageLink); | |
62 | - log.trace("Found customers [{}] by tenantId [{}] and pageLink [{}]", customerEntities, tenantId, pageLink); | |
63 | - return DaoUtil.convertDataList(customerEntities); | |
64 | - } | |
65 | - | |
66 | - @Override | |
67 | - public Optional<Customer> findCustomersByTenantIdAndTitle(UUID tenantId, String title) { | |
68 | - Select select = select().from(CUSTOMER_BY_TENANT_AND_TITLE_VIEW_NAME); | |
69 | - Select.Where query = select.where(); | |
70 | - query.and(eq(CUSTOMER_TENANT_ID_PROPERTY, tenantId)); | |
71 | - query.and(eq(CUSTOMER_TITLE_PROPERTY, title)); | |
72 | - CustomerEntity customerEntity = findOneByStatement(new TenantId(tenantId), query); | |
73 | - Customer customer = DaoUtil.getData(customerEntity); | |
74 | - return Optional.ofNullable(customer); | |
75 | - } | |
76 | - | |
77 | -} |
dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardDao.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.dashboard; | |
17 | - | |
18 | -import org.springframework.stereotype.Component; | |
19 | -import org.thingsboard.server.common.data.Dashboard; | |
20 | -import org.thingsboard.server.dao.model.nosql.DashboardEntity; | |
21 | -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao; | |
22 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
23 | - | |
24 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME; | |
25 | - | |
26 | -@Component | |
27 | -@NoSqlDao | |
28 | -public class CassandraDashboardDao extends CassandraAbstractSearchTextDao<DashboardEntity, Dashboard> implements DashboardDao { | |
29 | - | |
30 | - @Override | |
31 | - protected Class<DashboardEntity> getColumnFamilyClass() { | |
32 | - return DashboardEntity.class; | |
33 | - } | |
34 | - | |
35 | - @Override | |
36 | - protected String getColumnFamilyName() { | |
37 | - return DASHBOARD_COLUMN_FAMILY_NAME; | |
38 | - } | |
39 | -} |
dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.dashboard; | |
17 | - | |
18 | -import com.google.common.util.concurrent.Futures; | |
19 | -import com.google.common.util.concurrent.ListenableFuture; | |
20 | -import lombok.extern.slf4j.Slf4j; | |
21 | -import org.springframework.beans.factory.annotation.Autowired; | |
22 | -import org.springframework.stereotype.Component; | |
23 | -import org.thingsboard.server.common.data.DashboardInfo; | |
24 | -import org.thingsboard.server.common.data.EntityType; | |
25 | -import org.thingsboard.server.common.data.id.CustomerId; | |
26 | -import org.thingsboard.server.common.data.id.TenantId; | |
27 | -import org.thingsboard.server.common.data.page.TextPageLink; | |
28 | -import org.thingsboard.server.common.data.page.TimePageLink; | |
29 | -import org.thingsboard.server.common.data.relation.EntityRelation; | |
30 | -import org.thingsboard.server.common.data.relation.RelationTypeGroup; | |
31 | -import org.thingsboard.server.dao.DaoUtil; | |
32 | -import org.thingsboard.server.dao.model.nosql.DashboardInfoEntity; | |
33 | -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao; | |
34 | -import org.thingsboard.server.dao.relation.RelationDao; | |
35 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
36 | - | |
37 | -import java.util.ArrayList; | |
38 | -import java.util.Collections; | |
39 | -import java.util.List; | |
40 | -import java.util.UUID; | |
41 | - | |
42 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
43 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME; | |
45 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TENANT_ID_PROPERTY; | |
46 | - | |
47 | -@Component | |
48 | -@Slf4j | |
49 | -@NoSqlDao | |
50 | -public class CassandraDashboardInfoDao extends CassandraAbstractSearchTextDao<DashboardInfoEntity, DashboardInfo> implements DashboardInfoDao { | |
51 | - | |
52 | - @Autowired | |
53 | - private RelationDao relationDao; | |
54 | - | |
55 | - @Override | |
56 | - protected Class<DashboardInfoEntity> getColumnFamilyClass() { | |
57 | - return DashboardInfoEntity.class; | |
58 | - } | |
59 | - | |
60 | - @Override | |
61 | - protected String getColumnFamilyName() { | |
62 | - return DASHBOARD_COLUMN_FAMILY_NAME; | |
63 | - } | |
64 | - | |
65 | - @Override | |
66 | - public List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) { | |
67 | - log.debug("Try to find dashboards by tenantId [{}] and pageLink [{}]", tenantId, pageLink); | |
68 | - List<DashboardInfoEntity> dashboardEntities = findPageWithTextSearch(new TenantId(tenantId), DASHBOARD_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
69 | - Collections.singletonList(eq(DASHBOARD_TENANT_ID_PROPERTY, tenantId)), | |
70 | - pageLink); | |
71 | - | |
72 | - log.trace("Found dashboards [{}] by tenantId [{}] and pageLink [{}]", dashboardEntities, tenantId, pageLink); | |
73 | - return DaoUtil.convertDataList(dashboardEntities); | |
74 | - } | |
75 | - | |
76 | - @Override | |
77 | - public ListenableFuture<List<DashboardInfo>> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TimePageLink pageLink) { | |
78 | - log.debug("Try to find dashboards by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink); | |
79 | - | |
80 | - ListenableFuture<List<EntityRelation>> relations = relationDao.findRelations(new TenantId(tenantId), new CustomerId(customerId), EntityRelation.CONTAINS_TYPE, RelationTypeGroup.DASHBOARD, EntityType.DASHBOARD, pageLink); | |
81 | - | |
82 | - return Futures.transformAsync(relations, input -> { | |
83 | - List<ListenableFuture<DashboardInfo>> dashboardFutures = new ArrayList<>(input.size()); | |
84 | - for (EntityRelation relation : input) { | |
85 | - dashboardFutures.add(findByIdAsync(new TenantId(tenantId), relation.getTo().getId())); | |
86 | - } | |
87 | - return Futures.successfulAsList(dashboardFutures); | |
88 | - }); | |
89 | - } | |
90 | - | |
91 | -} |
dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceCredentialsDao.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.device; | |
17 | - | |
18 | -import com.datastax.driver.core.querybuilder.Select.Where; | |
19 | -import lombok.extern.slf4j.Slf4j; | |
20 | -import org.springframework.stereotype.Component; | |
21 | -import org.thingsboard.server.common.data.id.TenantId; | |
22 | -import org.thingsboard.server.common.data.security.DeviceCredentials; | |
23 | -import org.thingsboard.server.dao.DaoUtil; | |
24 | -import org.thingsboard.server.dao.model.ModelConstants; | |
25 | -import org.thingsboard.server.dao.model.nosql.DeviceCredentialsEntity; | |
26 | -import org.thingsboard.server.dao.nosql.CassandraAbstractModelDao; | |
27 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
28 | - | |
29 | -import java.util.UUID; | |
30 | - | |
31 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
32 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; | |
33 | - | |
34 | -@Component | |
35 | -@Slf4j | |
36 | -@NoSqlDao | |
37 | -public class CassandraDeviceCredentialsDao extends CassandraAbstractModelDao<DeviceCredentialsEntity, DeviceCredentials> implements DeviceCredentialsDao { | |
38 | - | |
39 | - @Override | |
40 | - protected Class<DeviceCredentialsEntity> getColumnFamilyClass() { | |
41 | - return DeviceCredentialsEntity.class; | |
42 | - } | |
43 | - | |
44 | - @Override | |
45 | - protected String getColumnFamilyName() { | |
46 | - return ModelConstants.DEVICE_CREDENTIALS_COLUMN_FAMILY_NAME; | |
47 | - } | |
48 | - | |
49 | - @Override | |
50 | - public DeviceCredentials findByDeviceId(TenantId tenantId, UUID deviceId) { | |
51 | - log.debug("Try to find device credentials by deviceId [{}] ", deviceId); | |
52 | - Where query = select().from(ModelConstants.DEVICE_CREDENTIALS_BY_DEVICE_COLUMN_FAMILY_NAME) | |
53 | - .where(eq(ModelConstants.DEVICE_CREDENTIALS_DEVICE_ID_PROPERTY, deviceId)); | |
54 | - log.trace("Execute query {}", query); | |
55 | - DeviceCredentialsEntity deviceCredentialsEntity = findOneByStatement(tenantId, query); | |
56 | - log.trace("Found device credentials [{}] by deviceId [{}]", deviceCredentialsEntity, deviceId); | |
57 | - return DaoUtil.getData(deviceCredentialsEntity); | |
58 | - } | |
59 | - | |
60 | - @Override | |
61 | - public DeviceCredentials findByCredentialsId(TenantId tenantId, String credentialsId) { | |
62 | - log.debug("Try to find device credentials by credentialsId [{}] ", credentialsId); | |
63 | - Where query = select().from(ModelConstants.DEVICE_CREDENTIALS_BY_CREDENTIALS_ID_COLUMN_FAMILY_NAME) | |
64 | - .where(eq(ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_ID_PROPERTY, credentialsId)); | |
65 | - log.trace("Execute query {}", query); | |
66 | - DeviceCredentialsEntity deviceCredentialsEntity = findOneByStatement(tenantId, query); | |
67 | - log.trace("Found device credentials [{}] by credentialsId [{}]", deviceCredentialsEntity, credentialsId); | |
68 | - return DaoUtil.getData(deviceCredentialsEntity); | |
69 | - } | |
70 | -} |
dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceDao.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.device; | |
17 | - | |
18 | -import com.datastax.driver.core.ResultSet; | |
19 | -import com.datastax.driver.core.ResultSetFuture; | |
20 | -import com.datastax.driver.core.Statement; | |
21 | -import com.datastax.driver.core.querybuilder.Select; | |
22 | -import com.datastax.driver.mapping.Result; | |
23 | -import com.google.common.base.Function; | |
24 | -import com.google.common.util.concurrent.Futures; | |
25 | -import com.google.common.util.concurrent.ListenableFuture; | |
26 | -import lombok.extern.slf4j.Slf4j; | |
27 | -import org.springframework.stereotype.Component; | |
28 | -import org.thingsboard.server.common.data.Device; | |
29 | -import org.thingsboard.server.common.data.EntitySubtype; | |
30 | -import org.thingsboard.server.common.data.EntityType; | |
31 | -import org.thingsboard.server.common.data.id.TenantId; | |
32 | -import org.thingsboard.server.common.data.page.TextPageLink; | |
33 | -import org.thingsboard.server.dao.DaoUtil; | |
34 | -import org.thingsboard.server.dao.model.EntitySubtypeEntity; | |
35 | -import org.thingsboard.server.dao.model.nosql.DeviceEntity; | |
36 | -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao; | |
37 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
38 | - | |
39 | -import javax.annotation.Nullable; | |
40 | -import java.util.ArrayList; | |
41 | -import java.util.Arrays; | |
42 | -import java.util.Collections; | |
43 | -import java.util.List; | |
44 | -import java.util.Optional; | |
45 | -import java.util.UUID; | |
46 | - | |
47 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
48 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.in; | |
49 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; | |
50 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; | |
51 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_BY_CUSTOMER_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; | |
52 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_BY_TENANT_AND_NAME_VIEW_NAME; | |
53 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; | |
54 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_BY_TENANT_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; | |
55 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_COLUMN_FAMILY_NAME; | |
56 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CUSTOMER_ID_PROPERTY; | |
57 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_NAME_PROPERTY; | |
58 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_TENANT_ID_PROPERTY; | |
59 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_TYPE_PROPERTY; | |
60 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_COLUMN_FAMILY_NAME; | |
61 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_ENTITY_TYPE_PROPERTY; | |
62 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_TENANT_ID_PROPERTY; | |
63 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
64 | - | |
65 | -@Component | |
66 | -@Slf4j | |
67 | -@NoSqlDao | |
68 | -public class CassandraDeviceDao extends CassandraAbstractSearchTextDao<DeviceEntity, Device> implements DeviceDao { | |
69 | - | |
70 | - @Override | |
71 | - protected Class<DeviceEntity> getColumnFamilyClass() { | |
72 | - return DeviceEntity.class; | |
73 | - } | |
74 | - | |
75 | - @Override | |
76 | - protected String getColumnFamilyName() { | |
77 | - return DEVICE_COLUMN_FAMILY_NAME; | |
78 | - } | |
79 | - | |
80 | - @Override | |
81 | - public Device save(TenantId tenantId, Device domain) { | |
82 | - Device savedDevice = super.save(tenantId, domain); | |
83 | - EntitySubtype entitySubtype = new EntitySubtype(savedDevice.getTenantId(), EntityType.DEVICE, savedDevice.getType()); | |
84 | - EntitySubtypeEntity entitySubtypeEntity = new EntitySubtypeEntity(entitySubtype); | |
85 | - Statement saveStatement = cluster.getMapper(EntitySubtypeEntity.class).saveQuery(entitySubtypeEntity); | |
86 | - executeWrite(tenantId, saveStatement); | |
87 | - return savedDevice; | |
88 | - } | |
89 | - | |
90 | - @Override | |
91 | - public List<Device> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink) { | |
92 | - log.debug("Try to find devices by tenantId [{}] and pageLink [{}]", tenantId, pageLink); | |
93 | - List<DeviceEntity> deviceEntities = findPageWithTextSearch(new TenantId(tenantId), DEVICE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
94 | - Collections.singletonList(eq(DEVICE_TENANT_ID_PROPERTY, tenantId)), pageLink); | |
95 | - | |
96 | - log.trace("Found devices [{}] by tenantId [{}] and pageLink [{}]", deviceEntities, tenantId, pageLink); | |
97 | - return DaoUtil.convertDataList(deviceEntities); | |
98 | - } | |
99 | - | |
100 | - @Override | |
101 | - public List<Device> findDevicesByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) { | |
102 | - log.debug("Try to find devices by tenantId [{}], type [{}] and pageLink [{}]", tenantId, type, pageLink); | |
103 | - List<DeviceEntity> deviceEntities = findPageWithTextSearch(new TenantId(tenantId), DEVICE_BY_TENANT_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
104 | - Arrays.asList(eq(DEVICE_TYPE_PROPERTY, type), | |
105 | - eq(DEVICE_TENANT_ID_PROPERTY, tenantId)), pageLink); | |
106 | - log.trace("Found devices [{}] by tenantId [{}], type [{}] and pageLink [{}]", deviceEntities, tenantId, type, pageLink); | |
107 | - return DaoUtil.convertDataList(deviceEntities); | |
108 | - } | |
109 | - | |
110 | - @Override | |
111 | - public ListenableFuture<List<Device>> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List<UUID> deviceIds) { | |
112 | - log.debug("Try to find devices by tenantId [{}] and device Ids [{}]", tenantId, deviceIds); | |
113 | - Select select = select().from(getColumnFamilyName()); | |
114 | - Select.Where query = select.where(); | |
115 | - query.and(eq(DEVICE_TENANT_ID_PROPERTY, tenantId)); | |
116 | - query.and(in(ID_PROPERTY, deviceIds)); | |
117 | - return findListByStatementAsync(new TenantId(tenantId), query); | |
118 | - } | |
119 | - | |
120 | - @Override | |
121 | - public List<Device> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { | |
122 | - log.debug("Try to find devices by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink); | |
123 | - List<DeviceEntity> deviceEntities = findPageWithTextSearch(new TenantId(tenantId), DEVICE_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
124 | - Arrays.asList(eq(DEVICE_CUSTOMER_ID_PROPERTY, customerId), | |
125 | - eq(DEVICE_TENANT_ID_PROPERTY, tenantId)), | |
126 | - pageLink); | |
127 | - | |
128 | - log.trace("Found devices [{}] by tenantId [{}], customerId [{}] and pageLink [{}]", deviceEntities, tenantId, customerId, pageLink); | |
129 | - return DaoUtil.convertDataList(deviceEntities); | |
130 | - } | |
131 | - | |
132 | - @Override | |
133 | - public List<Device> findDevicesByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) { | |
134 | - log.debug("Try to find devices by tenantId [{}], customerId [{}], type [{}] and pageLink [{}]", tenantId, customerId, type, pageLink); | |
135 | - List<DeviceEntity> deviceEntities = findPageWithTextSearch(new TenantId(tenantId), DEVICE_BY_CUSTOMER_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, | |
136 | - Arrays.asList(eq(DEVICE_TYPE_PROPERTY, type), | |
137 | - eq(DEVICE_CUSTOMER_ID_PROPERTY, customerId), | |
138 | - eq(DEVICE_TENANT_ID_PROPERTY, tenantId)), | |
139 | - pageLink); | |
140 | - | |
141 | - log.trace("Found devices [{}] by tenantId [{}], customerId [{}], type [{}] and pageLink [{}]", deviceEntities, tenantId, customerId, type, pageLink); | |
142 | - return DaoUtil.convertDataList(deviceEntities); | |
143 | - } | |
144 | - | |
145 | - @Override | |
146 | - public ListenableFuture<List<Device>> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> deviceIds) { | |
147 | - log.debug("Try to find devices by tenantId [{}], customerId [{}] and device Ids [{}]", tenantId, customerId, deviceIds); | |
148 | - Select select = select().from(getColumnFamilyName()); | |
149 | - Select.Where query = select.where(); | |
150 | - query.and(eq(DEVICE_TENANT_ID_PROPERTY, tenantId)); | |
151 | - query.and(eq(DEVICE_CUSTOMER_ID_PROPERTY, customerId)); | |
152 | - query.and(in(ID_PROPERTY, deviceIds)); | |
153 | - return findListByStatementAsync(new TenantId(tenantId), query); | |
154 | - } | |
155 | - | |
156 | - @Override | |
157 | - public Optional<Device> findDeviceByTenantIdAndName(UUID tenantId, String deviceName) { | |
158 | - Select select = select().from(DEVICE_BY_TENANT_AND_NAME_VIEW_NAME); | |
159 | - Select.Where query = select.where(); | |
160 | - query.and(eq(DEVICE_TENANT_ID_PROPERTY, tenantId)); | |
161 | - query.and(eq(DEVICE_NAME_PROPERTY, deviceName)); | |
162 | - return Optional.ofNullable(DaoUtil.getData(findOneByStatement(new TenantId(tenantId), query))); | |
163 | - } | |
164 | - | |
165 | - @Override | |
166 | - public ListenableFuture<List<EntitySubtype>> findTenantDeviceTypesAsync(UUID tenantId) { | |
167 | - Select select = select().from(ENTITY_SUBTYPE_COLUMN_FAMILY_NAME); | |
168 | - Select.Where query = select.where(); | |
169 | - query.and(eq(ENTITY_SUBTYPE_TENANT_ID_PROPERTY, tenantId)); | |
170 | - query.and(eq(ENTITY_SUBTYPE_ENTITY_TYPE_PROPERTY, EntityType.DEVICE)); | |
171 | - query.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); | |
172 | - ResultSetFuture resultSetFuture = executeAsyncRead(new TenantId(tenantId), query); | |
173 | - return Futures.transform(resultSetFuture, new Function<ResultSet, List<EntitySubtype>>() { | |
174 | - @Nullable | |
175 | - @Override | |
176 | - public List<EntitySubtype> apply(@Nullable ResultSet resultSet) { | |
177 | - Result<EntitySubtypeEntity> result = cluster.getMapper(EntitySubtypeEntity.class).map(resultSet); | |
178 | - if (result != null) { | |
179 | - List<EntitySubtype> entitySubtypes = new ArrayList<>(); | |
180 | - result.all().forEach((entitySubtypeEntity) -> | |
181 | - entitySubtypes.add(entitySubtypeEntity.toEntitySubtype()) | |
182 | - ); | |
183 | - return entitySubtypes; | |
184 | - } else { | |
185 | - return Collections.emptyList(); | |
186 | - } | |
187 | - } | |
188 | - }); | |
189 | - } | |
190 | - | |
191 | -} |
dao/src/main/java/org/thingsboard/server/dao/entityview/CassandraEntityViewDao.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.entityview; | |
17 | - | |
18 | -import com.datastax.driver.core.ResultSet; | |
19 | -import com.datastax.driver.core.ResultSetFuture; | |
20 | -import com.datastax.driver.core.Statement; | |
21 | -import com.datastax.driver.core.querybuilder.Select; | |
22 | -import com.datastax.driver.mapping.Result; | |
23 | -import com.google.common.base.Function; | |
24 | -import com.google.common.util.concurrent.Futures; | |
25 | -import com.google.common.util.concurrent.ListenableFuture; | |
26 | -import lombok.extern.slf4j.Slf4j; | |
27 | -import org.springframework.stereotype.Component; | |
28 | -import org.thingsboard.server.common.data.EntitySubtype; | |
29 | -import org.thingsboard.server.common.data.EntityType; | |
30 | -import org.thingsboard.server.common.data.EntityView; | |
31 | -import org.thingsboard.server.common.data.id.TenantId; | |
32 | -import org.thingsboard.server.common.data.page.TextPageLink; | |
33 | -import org.thingsboard.server.dao.DaoUtil; | |
34 | -import org.thingsboard.server.dao.model.EntitySubtypeEntity; | |
35 | -import org.thingsboard.server.dao.model.nosql.EntityViewEntity; | |
36 | -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao; | |
37 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
38 | - | |
39 | -import javax.annotation.Nullable; | |
40 | -import java.util.ArrayList; | |
41 | -import java.util.Arrays; | |
42 | -import java.util.Collections; | |
43 | -import java.util.List; | |
44 | -import java.util.Optional; | |
45 | -import java.util.UUID; | |
46 | - | |
47 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
48 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; | |
49 | -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_ID_PROPERTY; | |
50 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_TYPE_PROPERTY; | |
51 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_ID_COLUMN; | |
52 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_COLUMN_FAMILY_NAME; | |
53 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_ENTITY_TYPE_PROPERTY; | |
54 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_TENANT_ID_PROPERTY; | |
55 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_BY_TENANT_AND_CUSTOMER_AND_TYPE_CF; | |
56 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_BY_TENANT_AND_CUSTOMER_CF; | |
57 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_BY_TENANT_AND_ENTITY_ID_CF; | |
58 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_BY_TENANT_AND_NAME; | |
59 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_BY_TENANT_AND_SEARCH_TEXT_CF; | |
60 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_BY_TENANT_BY_TYPE_AND_SEARCH_TEXT_CF; | |
61 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_NAME_PROPERTY; | |
62 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_TABLE_FAMILY_NAME; | |
63 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_TENANT_ID_PROPERTY; | |
64 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_TYPE_PROPERTY; | |
65 | -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_ID_PROPERTY; | |
66 | - | |
67 | -/** | |
68 | - * Created by Victor Basanets on 9/06/2017. | |
69 | - */ | |
70 | -@Component | |
71 | -@Slf4j | |
72 | -@NoSqlDao | |
73 | -public class CassandraEntityViewDao extends CassandraAbstractSearchTextDao<EntityViewEntity, EntityView> implements EntityViewDao { | |
74 | - | |
75 | - @Override | |
76 | - protected Class<EntityViewEntity> getColumnFamilyClass() { | |
77 | - return EntityViewEntity.class; | |
78 | - } | |
79 | - | |
80 | - @Override | |
81 | - protected String getColumnFamilyName() { | |
82 | - return ENTITY_VIEW_TABLE_FAMILY_NAME; | |
83 | - } | |
84 | - | |
85 | - @Override | |
86 | - public EntityView save(TenantId tenantId, EntityView domain) { | |
87 | - EntityView savedEntityView = super.save(domain.getTenantId(), domain); | |
88 | - EntitySubtype entitySubtype = new EntitySubtype(savedEntityView.getTenantId(), EntityType.ENTITY_VIEW, savedEntityView.getType()); | |
89 | - EntitySubtypeEntity entitySubtypeEntity = new EntitySubtypeEntity(entitySubtype); | |
90 | - Statement saveStatement = cluster.getMapper(EntitySubtypeEntity.class).saveQuery(entitySubtypeEntity); | |
91 | - executeWrite(tenantId, saveStatement); | |
92 | - return savedEntityView; | |
93 | - } | |
94 | - | |
95 | - @Override | |
96 | - public List<EntityView> findEntityViewsByTenantId(UUID tenantId, TextPageLink pageLink) { | |
97 | - log.debug("Try to find entity views by tenantId [{}] and pageLink [{}]", tenantId, pageLink); | |
98 | - List<EntityViewEntity> entityViewEntities = | |
99 | - findPageWithTextSearch(new TenantId(tenantId), ENTITY_VIEW_BY_TENANT_AND_SEARCH_TEXT_CF, | |
100 | - Collections.singletonList(eq(TENANT_ID_PROPERTY, tenantId)), pageLink); | |
101 | - log.trace("Found entity views [{}] by tenantId [{}] and pageLink [{}]", | |
102 | - entityViewEntities, tenantId, pageLink); | |
103 | - return DaoUtil.convertDataList(entityViewEntities); | |
104 | - } | |
105 | - | |
106 | - @Override | |
107 | - public List<EntityView> findEntityViewsByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) { | |
108 | - log.debug("Try to find entity views by tenantId [{}], type [{}] and pageLink [{}]", tenantId, type, pageLink); | |
109 | - List<EntityViewEntity> entityViewEntities = | |
110 | - findPageWithTextSearch(new TenantId(tenantId), ENTITY_VIEW_BY_TENANT_BY_TYPE_AND_SEARCH_TEXT_CF, | |
111 | - Arrays.asList(eq(ENTITY_VIEW_TYPE_PROPERTY, type), | |
112 | - eq(TENANT_ID_PROPERTY, tenantId)), pageLink); | |
113 | - log.trace("Found entity views [{}] by tenantId [{}], type [{}] and pageLink [{}]", | |
114 | - entityViewEntities, tenantId, type, pageLink); | |
115 | - return DaoUtil.convertDataList(entityViewEntities); | |
116 | - } | |
117 | - | |
118 | - @Override | |
119 | - public Optional<EntityView> findEntityViewByTenantIdAndName(UUID tenantId, String name) { | |
120 | - Select.Where query = select().from(ENTITY_VIEW_BY_TENANT_AND_NAME).where(); | |
121 | - query.and(eq(ENTITY_VIEW_TENANT_ID_PROPERTY, tenantId)); | |
122 | - query.and(eq(ENTITY_VIEW_NAME_PROPERTY, name)); | |
123 | - return Optional.ofNullable(DaoUtil.getData(findOneByStatement(new TenantId(tenantId), query))); | |
124 | - } | |
125 | - | |
126 | - @Override | |
127 | - public List<EntityView> findEntityViewsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { | |
128 | - log.debug("Try to find entity views by tenantId [{}], customerId[{}] and pageLink [{}]", | |
129 | - tenantId, customerId, pageLink); | |
130 | - List<EntityViewEntity> entityViewEntities = findPageWithTextSearch(new TenantId(tenantId), | |
131 | - ENTITY_VIEW_BY_TENANT_AND_CUSTOMER_CF, | |
132 | - Arrays.asList(eq(CUSTOMER_ID_PROPERTY, customerId), eq(TENANT_ID_PROPERTY, tenantId)), | |
133 | - pageLink); | |
134 | - log.trace("Found find entity views [{}] by tenantId [{}], customerId [{}] and pageLink [{}]", | |
135 | - entityViewEntities, tenantId, customerId, pageLink); | |
136 | - return DaoUtil.convertDataList(entityViewEntities); | |
137 | - } | |
138 | - | |
139 | - @Override | |
140 | - public List<EntityView> findEntityViewsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) { | |
141 | - log.debug("Try to find entity views by tenantId [{}], customerId[{}], type [{}] and pageLink [{}]", | |
142 | - tenantId, customerId, type, pageLink); | |
143 | - List<EntityViewEntity> entityViewEntities = findPageWithTextSearch(new TenantId(tenantId), | |
144 | - ENTITY_VIEW_BY_TENANT_AND_CUSTOMER_AND_TYPE_CF, | |
145 | - Arrays.asList(eq(DEVICE_TYPE_PROPERTY, type), eq(CUSTOMER_ID_PROPERTY, customerId), eq(TENANT_ID_PROPERTY, tenantId)), | |
146 | - pageLink); | |
147 | - log.trace("Found find entity views [{}] by tenantId [{}], customerId [{}], type [{}] and pageLink [{}]", | |
148 | - entityViewEntities, tenantId, customerId, type, pageLink); | |
149 | - return DaoUtil.convertDataList(entityViewEntities); | |
150 | - } | |
151 | - | |
152 | - @Override | |
153 | - public ListenableFuture<List<EntityView>> findEntityViewsByTenantIdAndEntityIdAsync(UUID tenantId, UUID entityId) { | |
154 | - log.debug("Try to find entity views by tenantId [{}] and entityId [{}]", tenantId, entityId); | |
155 | - Select.Where query = select().from(ENTITY_VIEW_BY_TENANT_AND_ENTITY_ID_CF).where(); | |
156 | - query.and(eq(TENANT_ID_PROPERTY, tenantId)); | |
157 | - query.and(eq(ENTITY_ID_COLUMN, entityId)); | |
158 | - return findListByStatementAsync(new TenantId(tenantId), query); | |
159 | - } | |
160 | - | |
161 | - @Override | |
162 | - public ListenableFuture<List<EntitySubtype>> findTenantEntityViewTypesAsync(UUID tenantId) { | |
163 | - Select select = select().from(ENTITY_SUBTYPE_COLUMN_FAMILY_NAME); | |
164 | - Select.Where query = select.where(); | |
165 | - query.and(eq(ENTITY_SUBTYPE_TENANT_ID_PROPERTY, tenantId)); | |
166 | - query.and(eq(ENTITY_SUBTYPE_ENTITY_TYPE_PROPERTY, EntityType.ENTITY_VIEW)); | |
167 | - query.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); | |
168 | - ResultSetFuture resultSetFuture = executeAsyncRead(new TenantId(tenantId), query); | |
169 | - return Futures.transform(resultSetFuture, new Function<ResultSet, List<EntitySubtype>>() { | |
170 | - @Nullable | |
171 | - @Override | |
172 | - public List<EntitySubtype> apply(@Nullable ResultSet resultSet) { | |
173 | - Result<EntitySubtypeEntity> result = cluster.getMapper(EntitySubtypeEntity.class).map(resultSet); | |
174 | - if (result != null) { | |
175 | - List<EntitySubtype> entitySubtypes = new ArrayList<>(); | |
176 | - result.all().forEach((entitySubtypeEntity) -> | |
177 | - entitySubtypes.add(entitySubtypeEntity.toEntitySubtype()) | |
178 | - ); | |
179 | - return entitySubtypes; | |
180 | - } else { | |
181 | - return Collections.emptyList(); | |
182 | - } | |
183 | - } | |
184 | - }); | |
185 | - } | |
186 | -} |
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.event; | |
17 | - | |
18 | -import com.datastax.driver.core.ResultSetFuture; | |
19 | -import com.datastax.driver.core.querybuilder.Insert; | |
20 | -import com.datastax.driver.core.querybuilder.QueryBuilder; | |
21 | -import com.datastax.driver.core.querybuilder.Select; | |
22 | -import com.datastax.driver.core.utils.UUIDs; | |
23 | -import com.google.common.util.concurrent.Futures; | |
24 | -import com.google.common.util.concurrent.ListenableFuture; | |
25 | -import lombok.extern.slf4j.Slf4j; | |
26 | -import org.apache.commons.lang3.StringUtils; | |
27 | -import org.springframework.beans.factory.annotation.Value; | |
28 | -import org.springframework.stereotype.Component; | |
29 | -import org.thingsboard.server.common.data.DataConstants; | |
30 | -import org.thingsboard.server.common.data.Event; | |
31 | -import org.thingsboard.server.common.data.id.EntityId; | |
32 | -import org.thingsboard.server.common.data.id.EventId; | |
33 | -import org.thingsboard.server.common.data.id.TenantId; | |
34 | -import org.thingsboard.server.common.data.page.TimePageLink; | |
35 | -import org.thingsboard.server.dao.DaoUtil; | |
36 | -import org.thingsboard.server.dao.model.ModelConstants; | |
37 | -import org.thingsboard.server.dao.model.nosql.EventEntity; | |
38 | -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTimeDao; | |
39 | -import org.thingsboard.server.dao.util.NoSqlDao; | |
40 | - | |
41 | -import java.util.Arrays; | |
42 | -import java.util.List; | |
43 | -import java.util.Optional; | |
44 | -import java.util.UUID; | |
45 | -import java.util.concurrent.ExecutionException; | |
46 | - | |
47 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
48 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.in; | |
49 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; | |
50 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.ttl; | |
51 | -import static org.thingsboard.server.dao.model.ModelConstants.*; | |
52 | - | |
53 | -@Component | |
54 | -@Slf4j | |
55 | -@NoSqlDao | |
56 | -public class CassandraBaseEventDao extends CassandraAbstractSearchTimeDao<EventEntity, Event> implements EventDao { | |
57 | - | |
58 | - private final TenantId systemTenantId = new TenantId(NULL_UUID); | |
59 | - | |
60 | - @Override | |
61 | - protected Class<EventEntity> getColumnFamilyClass() { | |
62 | - return EventEntity.class; | |
63 | - } | |
64 | - | |
65 | - @Override | |
66 | - protected String getColumnFamilyName() { | |
67 | - return EVENT_COLUMN_FAMILY_NAME; | |
68 | - } | |
69 | - | |
70 | - @Value("${cassandra.query.events_ttl:0}") | |
71 | - private int eventsTtl; | |
72 | - | |
73 | - @Value("${cassandra.query.debug_events_ttl:0}") | |
74 | - private int debugEventsTtl; | |
75 | - | |
76 | - @Override | |
77 | - public Event save(TenantId tenantId, Event event) { | |
78 | - try { | |
79 | - return saveAsync(event).get(); | |
80 | - } catch (InterruptedException | ExecutionException e) { | |
81 | - throw new IllegalStateException("Could not save EventEntity", e); | |
82 | - } | |
83 | - } | |
84 | - | |
85 | - @Override | |
86 | - public ListenableFuture<Event> saveAsync(Event event) { | |
87 | - log.debug("Save event [{}] ", event); | |
88 | - if (event.getTenantId() == null) { | |
89 | - log.trace("Save system event with predefined id {}", systemTenantId); | |
90 | - event.setTenantId(systemTenantId); | |
91 | - } | |
92 | - if (event.getId() == null) { | |
93 | - event.setId(new EventId(UUIDs.timeBased())); | |
94 | - } | |
95 | - if (StringUtils.isEmpty(event.getUid())) { | |
96 | - event.setUid(event.getId().toString()); | |
97 | - } | |
98 | - ListenableFuture<Optional<Event>> optionalSave = saveAsync(event.getTenantId(), new EventEntity(event), false, eventsTtl); | |
99 | - return Futures.transform(optionalSave, opt -> opt.orElse(null)); | |
100 | - } | |
101 | - | |
102 | - @Override | |
103 | - public Optional<Event> saveIfNotExists(Event event) { | |
104 | - if (event.getTenantId() == null) { | |
105 | - log.trace("Save system event with predefined id {}", systemTenantId); | |
106 | - event.setTenantId(systemTenantId); | |
107 | - } | |
108 | - if (event.getId() == null) { | |
109 | - event.setId(new EventId(UUIDs.timeBased())); | |
110 | - } | |
111 | - return save(event.getTenantId(), new EventEntity(event), true, eventsTtl); | |
112 | - } | |
113 | - | |
114 | - @Override | |
115 | - public Event findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid) { | |
116 | - log.debug("Search event entity by [{}][{}][{}][{}]", tenantId, entityId, eventType, eventUid); | |
117 | - Select.Where query = select().from(getColumnFamilyName()).where( | |
118 | - eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId)) | |
119 | - .and(eq(ModelConstants.EVENT_ENTITY_TYPE_PROPERTY, entityId.getEntityType())) | |
120 | - .and(eq(ModelConstants.EVENT_ENTITY_ID_PROPERTY, entityId.getId())) | |
121 | - .and(eq(ModelConstants.EVENT_TYPE_PROPERTY, eventType)) | |
122 | - .and(eq(ModelConstants.EVENT_UID_PROPERTY, eventUid)); | |
123 | - log.trace("Execute query [{}]", query); | |
124 | - EventEntity entity = findOneByStatement(new TenantId(tenantId), query); | |
125 | - if (log.isTraceEnabled()) { | |
126 | - log.trace("Search result: [{}] for event entity [{}]", entity != null, entity); | |
127 | - } else { | |
128 | - log.debug("Search result: [{}]", entity != null); | |
129 | - } | |
130 | - return DaoUtil.getData(entity); | |
131 | - } | |
132 | - | |
133 | - @Override | |
134 | - public List<Event> findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink) { | |
135 | - log.trace("Try to find events by tenant [{}], entity [{}]and pageLink [{}]", tenantId, entityId, pageLink); | |
136 | - List<EventEntity> entities = findPageWithTimeSearch(new TenantId(tenantId), EVENT_BY_ID_VIEW_NAME, | |
137 | - Arrays.asList(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId), | |
138 | - eq(ModelConstants.EVENT_ENTITY_TYPE_PROPERTY, entityId.getEntityType()), | |
139 | - eq(ModelConstants.EVENT_ENTITY_ID_PROPERTY, entityId.getId())), | |
140 | - pageLink); | |
141 | - log.trace("Found events by tenant [{}], entity [{}] and pageLink [{}]", tenantId, entityId, pageLink); | |
142 | - return DaoUtil.convertDataList(entities); | |
143 | - } | |
144 | - | |
145 | - @Override | |
146 | - public List<Event> findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) { | |
147 | - log.trace("Try to find events by tenant [{}], entity [{}], type [{}] and pageLink [{}]", tenantId, entityId, eventType, pageLink); | |
148 | - List<EventEntity> entities = findPageWithTimeSearch(new TenantId(tenantId), EVENT_BY_TYPE_AND_ID_VIEW_NAME, | |
149 | - Arrays.asList(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId), | |
150 | - eq(ModelConstants.EVENT_ENTITY_TYPE_PROPERTY, entityId.getEntityType()), | |
151 | - eq(ModelConstants.EVENT_ENTITY_ID_PROPERTY, entityId.getId()), | |
152 | - eq(ModelConstants.EVENT_TYPE_PROPERTY, eventType)), | |
153 | - pageLink.isAscOrder() ? QueryBuilder.asc(ModelConstants.EVENT_TYPE_PROPERTY) : | |
154 | - QueryBuilder.desc(ModelConstants.EVENT_TYPE_PROPERTY), | |
155 | - pageLink); | |
156 | - log.trace("Found events by tenant [{}], entity [{}], type [{}] and pageLink [{}]", tenantId, entityId, eventType, pageLink); | |
157 | - return DaoUtil.convertDataList(entities); | |
158 | - } | |
159 | - | |
160 | - @Override | |
161 | - public List<Event> findLatestEvents(UUID tenantId, EntityId entityId, String eventType, int limit) { | |
162 | - log.trace("Try to find latest events by tenant [{}], entity [{}], type [{}] and limit [{}]", tenantId, entityId, eventType, limit); | |
163 | - Select select = select().from(EVENT_BY_TYPE_AND_ID_VIEW_NAME); | |
164 | - Select.Where query = select.where(); | |
165 | - query.and(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId)); | |
166 | - query.and(eq(ModelConstants.EVENT_ENTITY_TYPE_PROPERTY, entityId.getEntityType())); | |
167 | - query.and(eq(ModelConstants.EVENT_ENTITY_ID_PROPERTY, entityId.getId())); | |
168 | - query.and(eq(ModelConstants.EVENT_TYPE_PROPERTY, eventType)); | |
169 | - query.limit(limit); | |
170 | - query.orderBy(QueryBuilder.desc(ModelConstants.EVENT_TYPE_PROPERTY), QueryBuilder.desc(ModelConstants.ID_PROPERTY)); | |
171 | - List<EventEntity> entities = findListByStatement(new TenantId(tenantId), query); | |
172 | - return DaoUtil.convertDataList(entities); | |
173 | - } | |
174 | - | |
175 | - private Optional<Event> save(TenantId tenantId, EventEntity entity, boolean ifNotExists, int ttl) { | |
176 | - try { | |
177 | - return saveAsync(tenantId, entity, ifNotExists, ttl).get(); | |
178 | - } catch (InterruptedException | ExecutionException e) { | |
179 | - throw new IllegalStateException("Could not save EventEntity", e); | |
180 | - } | |
181 | - } | |
182 | - | |
183 | - private ListenableFuture<Optional<Event>> saveAsync(TenantId tenantId, EventEntity entity, boolean ifNotExists, int ttl) { | |
184 | - if (entity.getId() == null) { | |
185 | - entity.setId(UUIDs.timeBased()); | |
186 | - } | |
187 | - Insert insert = QueryBuilder.insertInto(getColumnFamilyName()) | |
188 | - .value(ModelConstants.ID_PROPERTY, entity.getId()) | |
189 | - .value(ModelConstants.EVENT_TENANT_ID_PROPERTY, entity.getTenantId()) | |
190 | - .value(ModelConstants.EVENT_ENTITY_TYPE_PROPERTY, entity.getEntityType()) | |
191 | - .value(ModelConstants.EVENT_ENTITY_ID_PROPERTY, entity.getEntityId()) | |
192 | - .value(ModelConstants.EVENT_TYPE_PROPERTY, entity.getEventType()) | |
193 | - .value(ModelConstants.EVENT_UID_PROPERTY, entity.getEventUid()) | |
194 | - .value(ModelConstants.EVENT_BODY_PROPERTY, entity.getBody()); | |
195 | - | |
196 | - if (ifNotExists) { | |
197 | - insert = insert.ifNotExists(); | |
198 | - } | |
199 | - | |
200 | - int selectedTtl = (entity.getEventType().equals(DataConstants.DEBUG_RULE_NODE) || | |
201 | - entity.getEventType().equals(DataConstants.DEBUG_RULE_CHAIN)) ? debugEventsTtl : ttl; | |
202 | - | |
203 | - if (selectedTtl > 0) { | |
204 | - insert.using(ttl(selectedTtl)); | |
205 | - } | |
206 | - ResultSetFuture resultSetFuture = executeAsyncWrite(tenantId, insert); | |
207 | - return Futures.transform(resultSetFuture, rs -> { | |
208 | - if (rs.wasApplied()) { | |
209 | - return Optional.of(DaoUtil.getData(entity)); | |
210 | - } else { | |
211 | - return Optional.empty(); | |
212 | - } | |
213 | - }); | |
214 | - } | |
215 | -} |
dao/src/main/java/org/thingsboard/server/dao/model/nosql/AdminSettingsEntity.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.Column; | |
20 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
21 | -import com.datastax.driver.mapping.annotations.Table; | |
22 | -import com.fasterxml.jackson.databind.JsonNode; | |
23 | -import lombok.EqualsAndHashCode; | |
24 | -import lombok.ToString; | |
25 | -import org.thingsboard.server.common.data.AdminSettings; | |
26 | -import org.thingsboard.server.common.data.id.AdminSettingsId; | |
27 | -import org.thingsboard.server.dao.model.BaseEntity; | |
28 | -import org.thingsboard.server.dao.model.type.JsonCodec; | |
29 | - | |
30 | -import java.util.UUID; | |
31 | - | |
32 | -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME; | |
33 | -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_JSON_VALUE_PROPERTY; | |
34 | -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_KEY_PROPERTY; | |
35 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
36 | - | |
37 | -@Table(name = ADMIN_SETTINGS_COLUMN_FAMILY_NAME) | |
38 | -@EqualsAndHashCode | |
39 | -@ToString | |
40 | -public final class AdminSettingsEntity implements BaseEntity<AdminSettings> { | |
41 | - | |
42 | - @PartitionKey(value = 0) | |
43 | - @Column(name = ID_PROPERTY) | |
44 | - private UUID id; | |
45 | - | |
46 | - @Column(name = ADMIN_SETTINGS_KEY_PROPERTY) | |
47 | - private String key; | |
48 | - | |
49 | - @Column(name = ADMIN_SETTINGS_JSON_VALUE_PROPERTY, codec = JsonCodec.class) | |
50 | - private JsonNode jsonValue; | |
51 | - | |
52 | - public AdminSettingsEntity() { | |
53 | - super(); | |
54 | - } | |
55 | - | |
56 | - public AdminSettingsEntity(AdminSettings adminSettings) { | |
57 | - if (adminSettings.getId() != null) { | |
58 | - this.id = adminSettings.getId().getId(); | |
59 | - } | |
60 | - this.key = adminSettings.getKey(); | |
61 | - this.jsonValue = adminSettings.getJsonValue(); | |
62 | - } | |
63 | - | |
64 | - public UUID getId() { | |
65 | - return id; | |
66 | - } | |
67 | - | |
68 | - public void setId(UUID id) { | |
69 | - this.id = id; | |
70 | - } | |
71 | - | |
72 | - public String getKey() { | |
73 | - return key; | |
74 | - } | |
75 | - | |
76 | - public void setKey(String key) { | |
77 | - this.key = key; | |
78 | - } | |
79 | - | |
80 | - public JsonNode getJsonValue() { | |
81 | - return jsonValue; | |
82 | - } | |
83 | - | |
84 | - public void setJsonValue(JsonNode jsonValue) { | |
85 | - this.jsonValue = jsonValue; | |
86 | - } | |
87 | - | |
88 | - @Override | |
89 | - public AdminSettings toData() { | |
90 | - AdminSettings adminSettings = new AdminSettings(new AdminSettingsId(id)); | |
91 | - adminSettings.setCreatedTime(UUIDs.unixTimestamp(id)); | |
92 | - adminSettings.setKey(key); | |
93 | - adminSettings.setJsonValue(jsonValue); | |
94 | - return adminSettings; | |
95 | - } | |
96 | - | |
97 | -} | |
\ No newline at end of file |
dao/src/main/java/org/thingsboard/server/dao/model/nosql/AlarmEntity.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.ClusteringColumn; | |
20 | -import com.datastax.driver.mapping.annotations.Column; | |
21 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
22 | -import com.datastax.driver.mapping.annotations.Table; | |
23 | -import com.fasterxml.jackson.databind.JsonNode; | |
24 | -import lombok.EqualsAndHashCode; | |
25 | -import lombok.ToString; | |
26 | -import org.thingsboard.server.common.data.EntityType; | |
27 | -import org.thingsboard.server.common.data.alarm.Alarm; | |
28 | -import org.thingsboard.server.common.data.alarm.AlarmId; | |
29 | -import org.thingsboard.server.common.data.alarm.AlarmSeverity; | |
30 | -import org.thingsboard.server.common.data.alarm.AlarmStatus; | |
31 | -import org.thingsboard.server.common.data.id.EntityIdFactory; | |
32 | -import org.thingsboard.server.common.data.id.TenantId; | |
33 | -import org.thingsboard.server.dao.model.BaseEntity; | |
34 | -import org.thingsboard.server.dao.model.type.AlarmSeverityCodec; | |
35 | -import org.thingsboard.server.dao.model.type.AlarmStatusCodec; | |
36 | -import org.thingsboard.server.dao.model.type.EntityTypeCodec; | |
37 | -import org.thingsboard.server.dao.model.type.JsonCodec; | |
38 | - | |
39 | -import java.util.UUID; | |
40 | - | |
41 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ACK_TS_PROPERTY; | |
42 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_CLEAR_TS_PROPERTY; | |
43 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_COLUMN_FAMILY_NAME; | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_DETAILS_PROPERTY; | |
45 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_END_TS_PROPERTY; | |
46 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_ID_PROPERTY; | |
47 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_TYPE_PROPERTY; | |
48 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_PROPAGATE_PROPERTY; | |
49 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_SEVERITY_PROPERTY; | |
50 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_START_TS_PROPERTY; | |
51 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_STATUS_PROPERTY; | |
52 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_TENANT_ID_PROPERTY; | |
53 | -import static org.thingsboard.server.dao.model.ModelConstants.ALARM_TYPE_PROPERTY; | |
54 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
55 | - | |
56 | -@Table(name = ALARM_COLUMN_FAMILY_NAME) | |
57 | -@EqualsAndHashCode | |
58 | -@ToString | |
59 | -public final class AlarmEntity implements BaseEntity<Alarm> { | |
60 | - | |
61 | - @ClusteringColumn(value = 1) | |
62 | - @Column(name = ID_PROPERTY) | |
63 | - private UUID id; | |
64 | - | |
65 | - @PartitionKey(value = 0) | |
66 | - @Column(name = ALARM_TENANT_ID_PROPERTY) | |
67 | - private UUID tenantId; | |
68 | - | |
69 | - @PartitionKey(value = 1) | |
70 | - @Column(name = ALARM_ORIGINATOR_ID_PROPERTY) | |
71 | - private UUID originatorId; | |
72 | - | |
73 | - @PartitionKey(value = 2) | |
74 | - @Column(name = ALARM_ORIGINATOR_TYPE_PROPERTY, codec = EntityTypeCodec.class) | |
75 | - private EntityType originatorType; | |
76 | - | |
77 | - @ClusteringColumn(value = 0) | |
78 | - @Column(name = ALARM_TYPE_PROPERTY) | |
79 | - private String type; | |
80 | - | |
81 | - @Column(name = ALARM_SEVERITY_PROPERTY, codec = AlarmSeverityCodec.class) | |
82 | - private AlarmSeverity severity; | |
83 | - | |
84 | - @Column(name = ALARM_STATUS_PROPERTY, codec = AlarmStatusCodec.class) | |
85 | - private AlarmStatus status; | |
86 | - | |
87 | - @Column(name = ALARM_START_TS_PROPERTY) | |
88 | - private Long startTs; | |
89 | - | |
90 | - @Column(name = ALARM_END_TS_PROPERTY) | |
91 | - private Long endTs; | |
92 | - | |
93 | - @Column(name = ALARM_ACK_TS_PROPERTY) | |
94 | - private Long ackTs; | |
95 | - | |
96 | - @Column(name = ALARM_CLEAR_TS_PROPERTY) | |
97 | - private Long clearTs; | |
98 | - | |
99 | - @Column(name = ALARM_DETAILS_PROPERTY, codec = JsonCodec.class) | |
100 | - private JsonNode details; | |
101 | - | |
102 | - @Column(name = ALARM_PROPAGATE_PROPERTY) | |
103 | - private Boolean propagate; | |
104 | - | |
105 | - public AlarmEntity() { | |
106 | - super(); | |
107 | - } | |
108 | - | |
109 | - public AlarmEntity(Alarm alarm) { | |
110 | - if (alarm.getId() != null) { | |
111 | - this.id = alarm.getId().getId(); | |
112 | - } | |
113 | - if (alarm.getTenantId() != null) { | |
114 | - this.tenantId = alarm.getTenantId().getId(); | |
115 | - } | |
116 | - this.type = alarm.getType(); | |
117 | - this.originatorId = alarm.getOriginator().getId(); | |
118 | - this.originatorType = alarm.getOriginator().getEntityType(); | |
119 | - this.type = alarm.getType(); | |
120 | - this.severity = alarm.getSeverity(); | |
121 | - this.status = alarm.getStatus(); | |
122 | - this.propagate = alarm.isPropagate(); | |
123 | - this.startTs = alarm.getStartTs(); | |
124 | - this.endTs = alarm.getEndTs(); | |
125 | - this.ackTs = alarm.getAckTs(); | |
126 | - this.clearTs = alarm.getClearTs(); | |
127 | - this.details = alarm.getDetails(); | |
128 | - } | |
129 | - | |
130 | - public UUID getId() { | |
131 | - return id; | |
132 | - } | |
133 | - | |
134 | - public void setId(UUID id) { | |
135 | - this.id = id; | |
136 | - } | |
137 | - | |
138 | - public UUID getTenantId() { | |
139 | - return tenantId; | |
140 | - } | |
141 | - | |
142 | - public void setTenantId(UUID tenantId) { | |
143 | - this.tenantId = tenantId; | |
144 | - } | |
145 | - | |
146 | - public UUID getOriginatorId() { | |
147 | - return originatorId; | |
148 | - } | |
149 | - | |
150 | - public void setOriginatorId(UUID originatorId) { | |
151 | - this.originatorId = originatorId; | |
152 | - } | |
153 | - | |
154 | - public EntityType getOriginatorType() { | |
155 | - return originatorType; | |
156 | - } | |
157 | - | |
158 | - public void setOriginatorType(EntityType originatorType) { | |
159 | - this.originatorType = originatorType; | |
160 | - } | |
161 | - | |
162 | - public String getType() { | |
163 | - return type; | |
164 | - } | |
165 | - | |
166 | - public void setType(String type) { | |
167 | - this.type = type; | |
168 | - } | |
169 | - | |
170 | - public AlarmSeverity getSeverity() { | |
171 | - return severity; | |
172 | - } | |
173 | - | |
174 | - public void setSeverity(AlarmSeverity severity) { | |
175 | - this.severity = severity; | |
176 | - } | |
177 | - | |
178 | - public AlarmStatus getStatus() { | |
179 | - return status; | |
180 | - } | |
181 | - | |
182 | - public void setStatus(AlarmStatus status) { | |
183 | - this.status = status; | |
184 | - } | |
185 | - | |
186 | - public Long getStartTs() { | |
187 | - return startTs; | |
188 | - } | |
189 | - | |
190 | - public void setStartTs(Long startTs) { | |
191 | - this.startTs = startTs; | |
192 | - } | |
193 | - | |
194 | - public Long getEndTs() { | |
195 | - return endTs; | |
196 | - } | |
197 | - | |
198 | - public void setEndTs(Long endTs) { | |
199 | - this.endTs = endTs; | |
200 | - } | |
201 | - | |
202 | - public Long getAckTs() { | |
203 | - return ackTs; | |
204 | - } | |
205 | - | |
206 | - public void setAckTs(Long ackTs) { | |
207 | - this.ackTs = ackTs; | |
208 | - } | |
209 | - | |
210 | - public Long getClearTs() { | |
211 | - return clearTs; | |
212 | - } | |
213 | - | |
214 | - public void setClearTs(Long clearTs) { | |
215 | - this.clearTs = clearTs; | |
216 | - } | |
217 | - | |
218 | - public JsonNode getDetails() { | |
219 | - return details; | |
220 | - } | |
221 | - | |
222 | - public void setDetails(JsonNode details) { | |
223 | - this.details = details; | |
224 | - } | |
225 | - | |
226 | - public Boolean getPropagate() { | |
227 | - return propagate; | |
228 | - } | |
229 | - | |
230 | - public void setPropagate(Boolean propagate) { | |
231 | - this.propagate = propagate; | |
232 | - } | |
233 | - | |
234 | - @Override | |
235 | - public Alarm toData() { | |
236 | - Alarm alarm = new Alarm(new AlarmId(id)); | |
237 | - alarm.setCreatedTime(UUIDs.unixTimestamp(id)); | |
238 | - if (tenantId != null) { | |
239 | - alarm.setTenantId(new TenantId(tenantId)); | |
240 | - } | |
241 | - alarm.setOriginator(EntityIdFactory.getByTypeAndUuid(originatorType, originatorId)); | |
242 | - alarm.setType(type); | |
243 | - alarm.setSeverity(severity); | |
244 | - alarm.setStatus(status); | |
245 | - alarm.setPropagate(propagate); | |
246 | - alarm.setStartTs(startTs); | |
247 | - alarm.setEndTs(endTs); | |
248 | - alarm.setAckTs(ackTs); | |
249 | - alarm.setClearTs(clearTs); | |
250 | - alarm.setDetails(details); | |
251 | - return alarm; | |
252 | - } | |
253 | - | |
254 | -} | |
\ No newline at end of file |
dao/src/main/java/org/thingsboard/server/dao/model/nosql/AssetEntity.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.Column; | |
20 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
21 | -import com.datastax.driver.mapping.annotations.Table; | |
22 | -import com.fasterxml.jackson.databind.JsonNode; | |
23 | -import lombok.EqualsAndHashCode; | |
24 | -import lombok.ToString; | |
25 | -import org.thingsboard.server.common.data.asset.Asset; | |
26 | -import org.thingsboard.server.common.data.id.AssetId; | |
27 | -import org.thingsboard.server.common.data.id.CustomerId; | |
28 | -import org.thingsboard.server.common.data.id.TenantId; | |
29 | -import org.thingsboard.server.dao.model.SearchTextEntity; | |
30 | -import org.thingsboard.server.dao.model.type.JsonCodec; | |
31 | - | |
32 | -import java.util.UUID; | |
33 | - | |
34 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY; | |
35 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_COLUMN_FAMILY_NAME; | |
36 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_CUSTOMER_ID_PROPERTY; | |
37 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_NAME_PROPERTY; | |
38 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TENANT_ID_PROPERTY; | |
39 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TYPE_PROPERTY; | |
40 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
41 | -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; | |
42 | - | |
43 | -@Table(name = ASSET_COLUMN_FAMILY_NAME) | |
44 | -@EqualsAndHashCode | |
45 | -@ToString | |
46 | -public final class AssetEntity implements SearchTextEntity<Asset> { | |
47 | - | |
48 | - @PartitionKey(value = 0) | |
49 | - @Column(name = ID_PROPERTY) | |
50 | - private UUID id; | |
51 | - | |
52 | - @PartitionKey(value = 1) | |
53 | - @Column(name = ASSET_TENANT_ID_PROPERTY) | |
54 | - private UUID tenantId; | |
55 | - | |
56 | - @PartitionKey(value = 2) | |
57 | - @Column(name = ASSET_CUSTOMER_ID_PROPERTY) | |
58 | - private UUID customerId; | |
59 | - | |
60 | - @PartitionKey(value = 3) | |
61 | - @Column(name = ASSET_TYPE_PROPERTY) | |
62 | - private String type; | |
63 | - | |
64 | - @Column(name = ASSET_NAME_PROPERTY) | |
65 | - private String name; | |
66 | - | |
67 | - @Column(name = SEARCH_TEXT_PROPERTY) | |
68 | - private String searchText; | |
69 | - | |
70 | - @Column(name = ASSET_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) | |
71 | - private JsonNode additionalInfo; | |
72 | - | |
73 | - public AssetEntity() { | |
74 | - super(); | |
75 | - } | |
76 | - | |
77 | - public AssetEntity(Asset asset) { | |
78 | - if (asset.getId() != null) { | |
79 | - this.id = asset.getId().getId(); | |
80 | - } | |
81 | - if (asset.getTenantId() != null) { | |
82 | - this.tenantId = asset.getTenantId().getId(); | |
83 | - } | |
84 | - if (asset.getCustomerId() != null) { | |
85 | - this.customerId = asset.getCustomerId().getId(); | |
86 | - } | |
87 | - this.name = asset.getName(); | |
88 | - this.type = asset.getType(); | |
89 | - this.additionalInfo = asset.getAdditionalInfo(); | |
90 | - } | |
91 | - | |
92 | - public UUID getId() { | |
93 | - return id; | |
94 | - } | |
95 | - | |
96 | - public void setId(UUID id) { | |
97 | - this.id = id; | |
98 | - } | |
99 | - | |
100 | - public UUID getTenantId() { | |
101 | - return tenantId; | |
102 | - } | |
103 | - | |
104 | - public void setTenantId(UUID tenantId) { | |
105 | - this.tenantId = tenantId; | |
106 | - } | |
107 | - | |
108 | - public UUID getCustomerId() { | |
109 | - return customerId; | |
110 | - } | |
111 | - | |
112 | - public void setCustomerId(UUID customerId) { | |
113 | - this.customerId = customerId; | |
114 | - } | |
115 | - | |
116 | - public String getName() { | |
117 | - return name; | |
118 | - } | |
119 | - | |
120 | - public void setName(String name) { | |
121 | - this.name = name; | |
122 | - } | |
123 | - | |
124 | - public String getType() { | |
125 | - return type; | |
126 | - } | |
127 | - | |
128 | - public void setType(String type) { | |
129 | - this.type = type; | |
130 | - } | |
131 | - | |
132 | - public JsonNode getAdditionalInfo() { | |
133 | - return additionalInfo; | |
134 | - } | |
135 | - | |
136 | - public void setAdditionalInfo(JsonNode additionalInfo) { | |
137 | - this.additionalInfo = additionalInfo; | |
138 | - } | |
139 | - | |
140 | - @Override | |
141 | - public String getSearchTextSource() { | |
142 | - return getName(); | |
143 | - } | |
144 | - | |
145 | - @Override | |
146 | - public void setSearchText(String searchText) { | |
147 | - this.searchText = searchText; | |
148 | - } | |
149 | - | |
150 | - public String getSearchText() { | |
151 | - return searchText; | |
152 | - } | |
153 | - | |
154 | - @Override | |
155 | - public Asset toData() { | |
156 | - Asset asset = new Asset(new AssetId(id)); | |
157 | - asset.setCreatedTime(UUIDs.unixTimestamp(id)); | |
158 | - if (tenantId != null) { | |
159 | - asset.setTenantId(new TenantId(tenantId)); | |
160 | - } | |
161 | - if (customerId != null) { | |
162 | - asset.setCustomerId(new CustomerId(customerId)); | |
163 | - } | |
164 | - asset.setName(name); | |
165 | - asset.setType(type); | |
166 | - asset.setAdditionalInfo(additionalInfo); | |
167 | - return asset; | |
168 | - } | |
169 | - | |
170 | -} | |
\ No newline at end of file |
dao/src/main/java/org/thingsboard/server/dao/model/nosql/AuditLogEntity.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.Column; | |
20 | -import com.datastax.driver.mapping.annotations.Table; | |
21 | -import com.fasterxml.jackson.databind.JsonNode; | |
22 | -import lombok.Data; | |
23 | -import lombok.NoArgsConstructor; | |
24 | -import org.thingsboard.server.common.data.EntityType; | |
25 | -import org.thingsboard.server.common.data.audit.ActionStatus; | |
26 | -import org.thingsboard.server.common.data.audit.ActionType; | |
27 | -import org.thingsboard.server.common.data.audit.AuditLog; | |
28 | -import org.thingsboard.server.common.data.id.AuditLogId; | |
29 | -import org.thingsboard.server.common.data.id.CustomerId; | |
30 | -import org.thingsboard.server.common.data.id.EntityIdFactory; | |
31 | -import org.thingsboard.server.common.data.id.TenantId; | |
32 | -import org.thingsboard.server.common.data.id.UserId; | |
33 | -import org.thingsboard.server.dao.model.BaseEntity; | |
34 | -import org.thingsboard.server.dao.model.type.ActionStatusCodec; | |
35 | -import org.thingsboard.server.dao.model.type.ActionTypeCodec; | |
36 | -import org.thingsboard.server.dao.model.type.EntityTypeCodec; | |
37 | -import org.thingsboard.server.dao.model.type.JsonCodec; | |
38 | - | |
39 | -import java.util.UUID; | |
40 | - | |
41 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_DATA_PROPERTY; | |
42 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_FAILURE_DETAILS_PROPERTY; | |
43 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_STATUS_PROPERTY; | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_TYPE_PROPERTY; | |
45 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_BY_ENTITY_ID_CF; | |
46 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_CUSTOMER_ID_PROPERTY; | |
47 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ENTITY_ID_PROPERTY; | |
48 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ENTITY_NAME_PROPERTY; | |
49 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ENTITY_TYPE_PROPERTY; | |
50 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_TENANT_ID_PROPERTY; | |
51 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_USER_ID_PROPERTY; | |
52 | -import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_USER_NAME_PROPERTY; | |
53 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
54 | - | |
55 | -@Table(name = AUDIT_LOG_BY_ENTITY_ID_CF) | |
56 | -@Data | |
57 | -@NoArgsConstructor | |
58 | -public class AuditLogEntity implements BaseEntity<AuditLog> { | |
59 | - | |
60 | - @Column(name = ID_PROPERTY) | |
61 | - private UUID id; | |
62 | - | |
63 | - @Column(name = AUDIT_LOG_TENANT_ID_PROPERTY) | |
64 | - private UUID tenantId; | |
65 | - | |
66 | - @Column(name = AUDIT_LOG_CUSTOMER_ID_PROPERTY) | |
67 | - private UUID customerId; | |
68 | - | |
69 | - @Column(name = AUDIT_LOG_ENTITY_TYPE_PROPERTY, codec = EntityTypeCodec.class) | |
70 | - private EntityType entityType; | |
71 | - | |
72 | - @Column(name = AUDIT_LOG_ENTITY_ID_PROPERTY) | |
73 | - private UUID entityId; | |
74 | - | |
75 | - @Column(name = AUDIT_LOG_ENTITY_NAME_PROPERTY) | |
76 | - private String entityName; | |
77 | - | |
78 | - @Column(name = AUDIT_LOG_USER_ID_PROPERTY) | |
79 | - private UUID userId; | |
80 | - | |
81 | - @Column(name = AUDIT_LOG_USER_NAME_PROPERTY) | |
82 | - private String userName; | |
83 | - | |
84 | - @Column(name = AUDIT_LOG_ACTION_TYPE_PROPERTY, codec = ActionTypeCodec.class) | |
85 | - private ActionType actionType; | |
86 | - | |
87 | - @Column(name = AUDIT_LOG_ACTION_DATA_PROPERTY, codec = JsonCodec.class) | |
88 | - private JsonNode actionData; | |
89 | - | |
90 | - @Column(name = AUDIT_LOG_ACTION_STATUS_PROPERTY, codec = ActionStatusCodec.class) | |
91 | - private ActionStatus actionStatus; | |
92 | - | |
93 | - @Column(name = AUDIT_LOG_ACTION_FAILURE_DETAILS_PROPERTY) | |
94 | - private String actionFailureDetails; | |
95 | - | |
96 | - @Override | |
97 | - public UUID getId() { | |
98 | - return id; | |
99 | - } | |
100 | - | |
101 | - @Override | |
102 | - public void setId(UUID id) { | |
103 | - this.id = id; | |
104 | - } | |
105 | - | |
106 | - public AuditLogEntity(AuditLog auditLog) { | |
107 | - if (auditLog.getId() != null) { | |
108 | - this.id = auditLog.getId().getId(); | |
109 | - } | |
110 | - if (auditLog.getTenantId() != null) { | |
111 | - this.tenantId = auditLog.getTenantId().getId(); | |
112 | - } | |
113 | - if (auditLog.getEntityId() != null) { | |
114 | - this.entityType = auditLog.getEntityId().getEntityType(); | |
115 | - this.entityId = auditLog.getEntityId().getId(); | |
116 | - } | |
117 | - if (auditLog.getCustomerId() != null) { | |
118 | - this.customerId = auditLog.getCustomerId().getId(); | |
119 | - } | |
120 | - if (auditLog.getUserId() != null) { | |
121 | - this.userId = auditLog.getUserId().getId(); | |
122 | - } | |
123 | - this.entityName = auditLog.getEntityName(); | |
124 | - this.userName = auditLog.getUserName(); | |
125 | - this.actionType = auditLog.getActionType(); | |
126 | - this.actionData = auditLog.getActionData(); | |
127 | - this.actionStatus = auditLog.getActionStatus(); | |
128 | - this.actionFailureDetails = auditLog.getActionFailureDetails(); | |
129 | - } | |
130 | - | |
131 | - @Override | |
132 | - public AuditLog toData() { | |
133 | - AuditLog auditLog = new AuditLog(new AuditLogId(id)); | |
134 | - auditLog.setCreatedTime(UUIDs.unixTimestamp(id)); | |
135 | - if (tenantId != null) { | |
136 | - auditLog.setTenantId(new TenantId(tenantId)); | |
137 | - } | |
138 | - if (entityId != null && entityType != null) { | |
139 | - auditLog.setEntityId(EntityIdFactory.getByTypeAndUuid(entityType, entityId)); | |
140 | - } | |
141 | - if (customerId != null) { | |
142 | - auditLog.setCustomerId(new CustomerId(customerId)); | |
143 | - } | |
144 | - if (userId != null) { | |
145 | - auditLog.setUserId(new UserId(userId)); | |
146 | - } | |
147 | - auditLog.setEntityName(this.entityName); | |
148 | - auditLog.setUserName(this.userName); | |
149 | - auditLog.setActionType(this.actionType); | |
150 | - auditLog.setActionData(this.actionData); | |
151 | - auditLog.setActionStatus(this.actionStatus); | |
152 | - auditLog.setActionFailureDetails(this.actionFailureDetails); | |
153 | - return auditLog; | |
154 | - } | |
155 | -} |
dao/src/main/java/org/thingsboard/server/dao/model/nosql/ComponentDescriptorEntity.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.mapping.annotations.Column; | |
19 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
20 | -import com.datastax.driver.mapping.annotations.Table; | |
21 | -import com.fasterxml.jackson.databind.JsonNode; | |
22 | -import org.thingsboard.server.common.data.id.ComponentDescriptorId; | |
23 | -import org.thingsboard.server.common.data.plugin.ComponentDescriptor; | |
24 | -import org.thingsboard.server.common.data.plugin.ComponentScope; | |
25 | -import org.thingsboard.server.common.data.plugin.ComponentType; | |
26 | -import org.thingsboard.server.dao.model.SearchTextEntity; | |
27 | -import org.thingsboard.server.dao.model.type.JsonCodec; | |
28 | - | |
29 | -import java.util.UUID; | |
30 | - | |
31 | -import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_ACTIONS_PROPERTY; | |
32 | -import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY; | |
33 | -import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_COLUMN_FAMILY_NAME; | |
34 | -import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY; | |
35 | -import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_NAME_PROPERTY; | |
36 | -import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_SCOPE_PROPERTY; | |
37 | -import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY; | |
38 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
39 | -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; | |
40 | - | |
41 | -/** | |
42 | - * @author Andrew Shvayka | |
43 | - */ | |
44 | -@Table(name = COMPONENT_DESCRIPTOR_COLUMN_FAMILY_NAME) | |
45 | -public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDescriptor> { | |
46 | - | |
47 | - @PartitionKey | |
48 | - @Column(name = ID_PROPERTY) | |
49 | - private UUID id; | |
50 | - | |
51 | - @Column(name = COMPONENT_DESCRIPTOR_TYPE_PROPERTY) | |
52 | - private ComponentType type; | |
53 | - | |
54 | - @Column(name = COMPONENT_DESCRIPTOR_SCOPE_PROPERTY) | |
55 | - private ComponentScope scope; | |
56 | - | |
57 | - @Column(name = COMPONENT_DESCRIPTOR_NAME_PROPERTY) | |
58 | - private String name; | |
59 | - | |
60 | - @Column(name = COMPONENT_DESCRIPTOR_CLASS_PROPERTY) | |
61 | - private String clazz; | |
62 | - | |
63 | - @Column(name = COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY, codec = JsonCodec.class) | |
64 | - private JsonNode configurationDescriptor; | |
65 | - | |
66 | - @Column(name = COMPONENT_DESCRIPTOR_ACTIONS_PROPERTY) | |
67 | - private String actions; | |
68 | - | |
69 | - @Column(name = SEARCH_TEXT_PROPERTY) | |
70 | - private String searchText; | |
71 | - | |
72 | - public ComponentDescriptorEntity() { | |
73 | - } | |
74 | - | |
75 | - public ComponentDescriptorEntity(ComponentDescriptor component) { | |
76 | - if (component.getId() != null) { | |
77 | - this.id = component.getId().getId(); | |
78 | - } | |
79 | - this.actions = component.getActions(); | |
80 | - this.type = component.getType(); | |
81 | - this.scope = component.getScope(); | |
82 | - this.name = component.getName(); | |
83 | - this.clazz = component.getClazz(); | |
84 | - this.configurationDescriptor = component.getConfigurationDescriptor(); | |
85 | - this.searchText = component.getName(); | |
86 | - } | |
87 | - | |
88 | - @Override | |
89 | - public ComponentDescriptor toData() { | |
90 | - ComponentDescriptor data = new ComponentDescriptor(new ComponentDescriptorId(id)); | |
91 | - data.setType(type); | |
92 | - data.setScope(scope); | |
93 | - data.setName(this.getName()); | |
94 | - data.setClazz(this.getClazz()); | |
95 | - data.setActions(this.getActions()); | |
96 | - data.setConfigurationDescriptor(this.getConfigurationDescriptor()); | |
97 | - return data; | |
98 | - } | |
99 | - | |
100 | - @Override | |
101 | - public UUID getId() { | |
102 | - return id; | |
103 | - } | |
104 | - | |
105 | - @Override | |
106 | - public void setId(UUID id) { | |
107 | - this.id = id; | |
108 | - } | |
109 | - | |
110 | - public String getActions() { | |
111 | - return actions; | |
112 | - } | |
113 | - | |
114 | - public void setActions(String actions) { | |
115 | - this.actions = actions; | |
116 | - } | |
117 | - | |
118 | - public ComponentType getType() { | |
119 | - return type; | |
120 | - } | |
121 | - | |
122 | - public void setType(ComponentType type) { | |
123 | - this.type = type; | |
124 | - } | |
125 | - | |
126 | - public ComponentScope getScope() { | |
127 | - return scope; | |
128 | - } | |
129 | - | |
130 | - public void setScope(ComponentScope scope) { | |
131 | - this.scope = scope; | |
132 | - } | |
133 | - | |
134 | - public String getName() { | |
135 | - return name; | |
136 | - } | |
137 | - | |
138 | - public void setName(String name) { | |
139 | - this.name = name; | |
140 | - } | |
141 | - | |
142 | - public String getClazz() { | |
143 | - return clazz; | |
144 | - } | |
145 | - | |
146 | - public void setClazz(String clazz) { | |
147 | - this.clazz = clazz; | |
148 | - } | |
149 | - | |
150 | - public JsonNode getConfigurationDescriptor() { | |
151 | - return configurationDescriptor; | |
152 | - } | |
153 | - | |
154 | - public void setConfigurationDescriptor(JsonNode configurationDescriptor) { | |
155 | - this.configurationDescriptor = configurationDescriptor; | |
156 | - } | |
157 | - | |
158 | - public String getSearchText() { | |
159 | - return searchText; | |
160 | - } | |
161 | - | |
162 | - @Override | |
163 | - public void setSearchText(String searchText) { | |
164 | - this.searchText = searchText; | |
165 | - } | |
166 | - | |
167 | - @Override | |
168 | - public String getSearchTextSource() { | |
169 | - return getSearchText(); | |
170 | - } | |
171 | -} |
dao/src/main/java/org/thingsboard/server/dao/model/nosql/CustomerEntity.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.Column; | |
20 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
21 | -import com.datastax.driver.mapping.annotations.Table; | |
22 | -import com.fasterxml.jackson.databind.JsonNode; | |
23 | -import lombok.EqualsAndHashCode; | |
24 | -import lombok.ToString; | |
25 | -import org.thingsboard.server.common.data.Customer; | |
26 | -import org.thingsboard.server.common.data.id.CustomerId; | |
27 | -import org.thingsboard.server.common.data.id.TenantId; | |
28 | -import org.thingsboard.server.dao.model.SearchTextEntity; | |
29 | -import org.thingsboard.server.dao.model.type.JsonCodec; | |
30 | - | |
31 | -import java.util.UUID; | |
32 | - | |
33 | -import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS2_PROPERTY; | |
34 | -import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS_PROPERTY; | |
35 | -import static org.thingsboard.server.dao.model.ModelConstants.CITY_PROPERTY; | |
36 | -import static org.thingsboard.server.dao.model.ModelConstants.COUNTRY_PROPERTY; | |
37 | -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY; | |
38 | -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME; | |
39 | -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TENANT_ID_PROPERTY; | |
40 | -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TITLE_PROPERTY; | |
41 | -import static org.thingsboard.server.dao.model.ModelConstants.EMAIL_PROPERTY; | |
42 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
43 | -import static org.thingsboard.server.dao.model.ModelConstants.PHONE_PROPERTY; | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; | |
45 | -import static org.thingsboard.server.dao.model.ModelConstants.STATE_PROPERTY; | |
46 | -import static org.thingsboard.server.dao.model.ModelConstants.ZIP_PROPERTY; | |
47 | - | |
48 | -@Table(name = CUSTOMER_COLUMN_FAMILY_NAME) | |
49 | -@EqualsAndHashCode | |
50 | -@ToString | |
51 | -public final class CustomerEntity implements SearchTextEntity<Customer> { | |
52 | - | |
53 | - @PartitionKey(value = 0) | |
54 | - @Column(name = ID_PROPERTY) | |
55 | - private UUID id; | |
56 | - | |
57 | - @PartitionKey(value = 1) | |
58 | - @Column(name = CUSTOMER_TENANT_ID_PROPERTY) | |
59 | - private UUID tenantId; | |
60 | - | |
61 | - @Column(name = CUSTOMER_TITLE_PROPERTY) | |
62 | - private String title; | |
63 | - | |
64 | - @Column(name = SEARCH_TEXT_PROPERTY) | |
65 | - private String searchText; | |
66 | - | |
67 | - @Column(name = COUNTRY_PROPERTY) | |
68 | - private String country; | |
69 | - | |
70 | - @Column(name = STATE_PROPERTY) | |
71 | - private String state; | |
72 | - | |
73 | - @Column(name = CITY_PROPERTY) | |
74 | - private String city; | |
75 | - | |
76 | - @Column(name = ADDRESS_PROPERTY) | |
77 | - private String address; | |
78 | - | |
79 | - @Column(name = ADDRESS2_PROPERTY) | |
80 | - private String address2; | |
81 | - | |
82 | - @Column(name = ZIP_PROPERTY) | |
83 | - private String zip; | |
84 | - | |
85 | - @Column(name = PHONE_PROPERTY) | |
86 | - private String phone; | |
87 | - | |
88 | - @Column(name = EMAIL_PROPERTY) | |
89 | - private String email; | |
90 | - | |
91 | - @Column(name = CUSTOMER_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) | |
92 | - private JsonNode additionalInfo; | |
93 | - | |
94 | - public CustomerEntity() { | |
95 | - super(); | |
96 | - } | |
97 | - | |
98 | - public CustomerEntity(Customer customer) { | |
99 | - if (customer.getId() != null) { | |
100 | - this.id = customer.getId().getId(); | |
101 | - } | |
102 | - this.tenantId = customer.getTenantId().getId(); | |
103 | - this.title = customer.getTitle(); | |
104 | - this.country = customer.getCountry(); | |
105 | - this.state = customer.getState(); | |
106 | - this.city = customer.getCity(); | |
107 | - this.address = customer.getAddress(); | |
108 | - this.address2 = customer.getAddress2(); | |
109 | - this.zip = customer.getZip(); | |
110 | - this.phone = customer.getPhone(); | |
111 | - this.email = customer.getEmail(); | |
112 | - this.additionalInfo = customer.getAdditionalInfo(); | |
113 | - } | |
114 | - | |
115 | - public UUID getId() { | |
116 | - return id; | |
117 | - } | |
118 | - | |
119 | - public void setId(UUID id) { | |
120 | - this.id = id; | |
121 | - } | |
122 | - | |
123 | - public UUID getTenantId() { | |
124 | - return tenantId; | |
125 | - } | |
126 | - | |
127 | - public void setTenantId(UUID tenantId) { | |
128 | - this.tenantId = tenantId; | |
129 | - } | |
130 | - | |
131 | - public String getTitle() { | |
132 | - return title; | |
133 | - } | |
134 | - | |
135 | - public void setTitle(String title) { | |
136 | - this.title = title; | |
137 | - } | |
138 | - | |
139 | - public String getCountry() { | |
140 | - return country; | |
141 | - } | |
142 | - | |
143 | - public void setCountry(String country) { | |
144 | - this.country = country; | |
145 | - } | |
146 | - | |
147 | - public String getState() { | |
148 | - return state; | |
149 | - } | |
150 | - | |
151 | - public void setState(String state) { | |
152 | - this.state = state; | |
153 | - } | |
154 | - | |
155 | - public String getCity() { | |
156 | - return city; | |
157 | - } | |
158 | - | |
159 | - public void setCity(String city) { | |
160 | - this.city = city; | |
161 | - } | |
162 | - | |
163 | - public String getAddress() { | |
164 | - return address; | |
165 | - } | |
166 | - | |
167 | - public void setAddress(String address) { | |
168 | - this.address = address; | |
169 | - } | |
170 | - | |
171 | - public String getAddress2() { | |
172 | - return address2; | |
173 | - } | |
174 | - | |
175 | - public void setAddress2(String address2) { | |
176 | - this.address2 = address2; | |
177 | - } | |
178 | - | |
179 | - public String getZip() { | |
180 | - return zip; | |
181 | - } | |
182 | - | |
183 | - public void setZip(String zip) { | |
184 | - this.zip = zip; | |
185 | - } | |
186 | - | |
187 | - public String getPhone() { | |
188 | - return phone; | |
189 | - } | |
190 | - | |
191 | - public void setPhone(String phone) { | |
192 | - this.phone = phone; | |
193 | - } | |
194 | - | |
195 | - public String getEmail() { | |
196 | - return email; | |
197 | - } | |
198 | - | |
199 | - public void setEmail(String email) { | |
200 | - this.email = email; | |
201 | - } | |
202 | - | |
203 | - public JsonNode getAdditionalInfo() { | |
204 | - return additionalInfo; | |
205 | - } | |
206 | - | |
207 | - public void setAdditionalInfo(JsonNode additionalInfo) { | |
208 | - this.additionalInfo = additionalInfo; | |
209 | - } | |
210 | - | |
211 | - @Override | |
212 | - public String getSearchTextSource() { | |
213 | - return getTitle(); | |
214 | - } | |
215 | - | |
216 | - @Override | |
217 | - public void setSearchText(String searchText) { | |
218 | - this.searchText = searchText; | |
219 | - } | |
220 | - | |
221 | - public String getSearchText() { | |
222 | - return searchText; | |
223 | - } | |
224 | - | |
225 | - @Override | |
226 | - public Customer toData() { | |
227 | - Customer customer = new Customer(new CustomerId(id)); | |
228 | - customer.setCreatedTime(UUIDs.unixTimestamp(id)); | |
229 | - customer.setTenantId(new TenantId(tenantId)); | |
230 | - customer.setTitle(title); | |
231 | - customer.setCountry(country); | |
232 | - customer.setState(state); | |
233 | - customer.setCity(city); | |
234 | - customer.setAddress(address); | |
235 | - customer.setAddress2(address2); | |
236 | - customer.setZip(zip); | |
237 | - customer.setPhone(phone); | |
238 | - customer.setEmail(email); | |
239 | - customer.setAdditionalInfo(additionalInfo); | |
240 | - return customer; | |
241 | - } | |
242 | - | |
243 | -} | |
\ No newline at end of file |
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.Column; | |
20 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
21 | -import com.datastax.driver.mapping.annotations.Table; | |
22 | -import com.fasterxml.jackson.core.JsonProcessingException; | |
23 | -import com.fasterxml.jackson.databind.JavaType; | |
24 | -import com.fasterxml.jackson.databind.JsonNode; | |
25 | -import com.fasterxml.jackson.databind.ObjectMapper; | |
26 | -import lombok.EqualsAndHashCode; | |
27 | -import lombok.ToString; | |
28 | -import lombok.extern.slf4j.Slf4j; | |
29 | -import org.springframework.util.StringUtils; | |
30 | -import org.thingsboard.server.common.data.Dashboard; | |
31 | -import org.thingsboard.server.common.data.ShortCustomerInfo; | |
32 | -import org.thingsboard.server.common.data.id.DashboardId; | |
33 | -import org.thingsboard.server.common.data.id.TenantId; | |
34 | -import org.thingsboard.server.dao.model.SearchTextEntity; | |
35 | -import org.thingsboard.server.dao.model.type.JsonCodec; | |
36 | - | |
37 | -import java.io.IOException; | |
38 | -import java.util.HashSet; | |
39 | -import java.util.UUID; | |
40 | - | |
41 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_ASSIGNED_CUSTOMERS_PROPERTY; | |
42 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME; | |
43 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY; | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TENANT_ID_PROPERTY; | |
45 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TITLE_PROPERTY; | |
46 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
47 | -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; | |
48 | - | |
49 | -@Table(name = DASHBOARD_COLUMN_FAMILY_NAME) | |
50 | -@EqualsAndHashCode | |
51 | -@ToString | |
52 | -@Slf4j | |
53 | -public final class DashboardEntity implements SearchTextEntity<Dashboard> { | |
54 | - | |
55 | - private static final ObjectMapper objectMapper = new ObjectMapper(); | |
56 | - private static final JavaType assignedCustomersType = | |
57 | - objectMapper.getTypeFactory().constructCollectionType(HashSet.class, ShortCustomerInfo.class); | |
58 | - | |
59 | - @PartitionKey(value = 0) | |
60 | - @Column(name = ID_PROPERTY) | |
61 | - private UUID id; | |
62 | - | |
63 | - @PartitionKey(value = 1) | |
64 | - @Column(name = DASHBOARD_TENANT_ID_PROPERTY) | |
65 | - private UUID tenantId; | |
66 | - | |
67 | - @Column(name = DASHBOARD_TITLE_PROPERTY) | |
68 | - private String title; | |
69 | - | |
70 | - @Column(name = SEARCH_TEXT_PROPERTY) | |
71 | - private String searchText; | |
72 | - | |
73 | - @Column(name = DASHBOARD_ASSIGNED_CUSTOMERS_PROPERTY) | |
74 | - private String assignedCustomers; | |
75 | - | |
76 | - @Column(name = DASHBOARD_CONFIGURATION_PROPERTY, codec = JsonCodec.class) | |
77 | - private JsonNode configuration; | |
78 | - | |
79 | - public DashboardEntity() { | |
80 | - super(); | |
81 | - } | |
82 | - | |
83 | - public DashboardEntity(Dashboard dashboard) { | |
84 | - if (dashboard.getId() != null) { | |
85 | - this.id = dashboard.getId().getId(); | |
86 | - } | |
87 | - if (dashboard.getTenantId() != null) { | |
88 | - this.tenantId = dashboard.getTenantId().getId(); | |
89 | - } | |
90 | - this.title = dashboard.getTitle(); | |
91 | - if (dashboard.getAssignedCustomers() != null) { | |
92 | - try { | |
93 | - this.assignedCustomers = objectMapper.writeValueAsString(dashboard.getAssignedCustomers()); | |
94 | - } catch (JsonProcessingException e) { | |
95 | - log.error("Unable to serialize assigned customers to string!", e); | |
96 | - } | |
97 | - } | |
98 | - this.configuration = dashboard.getConfiguration(); | |
99 | - } | |
100 | - | |
101 | - public UUID getId() { | |
102 | - return id; | |
103 | - } | |
104 | - | |
105 | - public void setId(UUID id) { | |
106 | - this.id = id; | |
107 | - } | |
108 | - | |
109 | - public UUID getTenantId() { | |
110 | - return tenantId; | |
111 | - } | |
112 | - | |
113 | - public void setTenantId(UUID tenantId) { | |
114 | - this.tenantId = tenantId; | |
115 | - } | |
116 | - | |
117 | - public String getTitle() { | |
118 | - return title; | |
119 | - } | |
120 | - | |
121 | - public void setTitle(String title) { | |
122 | - this.title = title; | |
123 | - } | |
124 | - | |
125 | - public String getAssignedCustomers() { | |
126 | - return assignedCustomers; | |
127 | - } | |
128 | - | |
129 | - public void setAssignedCustomers(String assignedCustomers) { | |
130 | - this.assignedCustomers = assignedCustomers; | |
131 | - } | |
132 | - | |
133 | - public JsonNode getConfiguration() { | |
134 | - return configuration; | |
135 | - } | |
136 | - | |
137 | - public void setConfiguration(JsonNode configuration) { | |
138 | - this.configuration = configuration; | |
139 | - } | |
140 | - | |
141 | - @Override | |
142 | - public String getSearchTextSource() { | |
143 | - return getTitle(); | |
144 | - } | |
145 | - | |
146 | - @Override | |
147 | - public void setSearchText(String searchText) { | |
148 | - this.searchText = searchText; | |
149 | - } | |
150 | - | |
151 | - public String getSearchText() { | |
152 | - return searchText; | |
153 | - } | |
154 | - | |
155 | - @Override | |
156 | - public Dashboard toData() { | |
157 | - Dashboard dashboard = new Dashboard(new DashboardId(id)); | |
158 | - dashboard.setCreatedTime(UUIDs.unixTimestamp(id)); | |
159 | - if (tenantId != null) { | |
160 | - dashboard.setTenantId(new TenantId(tenantId)); | |
161 | - } | |
162 | - dashboard.setTitle(title); | |
163 | - if (!StringUtils.isEmpty(assignedCustomers)) { | |
164 | - try { | |
165 | - dashboard.setAssignedCustomers(objectMapper.readValue(assignedCustomers, assignedCustomersType)); | |
166 | - } catch (IOException e) { | |
167 | - log.warn("Unable to parse assigned customers!", e); | |
168 | - } | |
169 | - } | |
170 | - dashboard.setConfiguration(configuration); | |
171 | - return dashboard; | |
172 | - } | |
173 | - | |
174 | -} | |
\ No newline at end of file |
dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardInfoEntity.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.Column; | |
20 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
21 | -import com.datastax.driver.mapping.annotations.Table; | |
22 | -import com.fasterxml.jackson.core.JsonProcessingException; | |
23 | -import com.fasterxml.jackson.databind.JavaType; | |
24 | -import com.fasterxml.jackson.databind.ObjectMapper; | |
25 | -import lombok.EqualsAndHashCode; | |
26 | -import lombok.ToString; | |
27 | -import lombok.extern.slf4j.Slf4j; | |
28 | -import org.springframework.util.StringUtils; | |
29 | -import org.thingsboard.server.common.data.DashboardInfo; | |
30 | -import org.thingsboard.server.common.data.ShortCustomerInfo; | |
31 | -import org.thingsboard.server.common.data.id.DashboardId; | |
32 | -import org.thingsboard.server.common.data.id.TenantId; | |
33 | -import org.thingsboard.server.dao.model.SearchTextEntity; | |
34 | - | |
35 | -import java.io.IOException; | |
36 | -import java.util.HashSet; | |
37 | -import java.util.UUID; | |
38 | - | |
39 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_ASSIGNED_CUSTOMERS_PROPERTY; | |
40 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME; | |
41 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TENANT_ID_PROPERTY; | |
42 | -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TITLE_PROPERTY; | |
43 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; | |
45 | - | |
46 | -@Table(name = DASHBOARD_COLUMN_FAMILY_NAME) | |
47 | -@EqualsAndHashCode | |
48 | -@ToString | |
49 | -@Slf4j | |
50 | -public class DashboardInfoEntity implements SearchTextEntity<DashboardInfo> { | |
51 | - | |
52 | - private static final ObjectMapper objectMapper = new ObjectMapper(); | |
53 | - private static final JavaType assignedCustomersType = | |
54 | - objectMapper.getTypeFactory().constructCollectionType(HashSet.class, ShortCustomerInfo.class); | |
55 | - | |
56 | - @PartitionKey(value = 0) | |
57 | - @Column(name = ID_PROPERTY) | |
58 | - private UUID id; | |
59 | - | |
60 | - @PartitionKey(value = 1) | |
61 | - @Column(name = DASHBOARD_TENANT_ID_PROPERTY) | |
62 | - private UUID tenantId; | |
63 | - | |
64 | - @Column(name = DASHBOARD_TITLE_PROPERTY) | |
65 | - private String title; | |
66 | - | |
67 | - @Column(name = SEARCH_TEXT_PROPERTY) | |
68 | - private String searchText; | |
69 | - | |
70 | - @Column(name = DASHBOARD_ASSIGNED_CUSTOMERS_PROPERTY) | |
71 | - private String assignedCustomers; | |
72 | - | |
73 | - public DashboardInfoEntity() { | |
74 | - super(); | |
75 | - } | |
76 | - | |
77 | - public DashboardInfoEntity(DashboardInfo dashboardInfo) { | |
78 | - if (dashboardInfo.getId() != null) { | |
79 | - this.id = dashboardInfo.getId().getId(); | |
80 | - } | |
81 | - if (dashboardInfo.getTenantId() != null) { | |
82 | - this.tenantId = dashboardInfo.getTenantId().getId(); | |
83 | - } | |
84 | - this.title = dashboardInfo.getTitle(); | |
85 | - if (dashboardInfo.getAssignedCustomers() != null) { | |
86 | - try { | |
87 | - this.assignedCustomers = objectMapper.writeValueAsString(dashboardInfo.getAssignedCustomers()); | |
88 | - } catch (JsonProcessingException e) { | |
89 | - log.error("Unable to serialize assigned customers to string!", e); | |
90 | - } | |
91 | - } | |
92 | - } | |
93 | - | |
94 | - public UUID getId() { | |
95 | - return id; | |
96 | - } | |
97 | - | |
98 | - public void setId(UUID id) { | |
99 | - this.id = id; | |
100 | - } | |
101 | - | |
102 | - public UUID getTenantId() { | |
103 | - return tenantId; | |
104 | - } | |
105 | - | |
106 | - public void setTenantId(UUID tenantId) { | |
107 | - this.tenantId = tenantId; | |
108 | - } | |
109 | - | |
110 | - public String getTitle() { | |
111 | - return title; | |
112 | - } | |
113 | - | |
114 | - public void setTitle(String title) { | |
115 | - this.title = title; | |
116 | - } | |
117 | - | |
118 | - public String getAssignedCustomers() { | |
119 | - return assignedCustomers; | |
120 | - } | |
121 | - | |
122 | - public void setAssignedCustomers(String assignedCustomers) { | |
123 | - this.assignedCustomers = assignedCustomers; | |
124 | - } | |
125 | - | |
126 | - @Override | |
127 | - public String getSearchTextSource() { | |
128 | - return getTitle(); | |
129 | - } | |
130 | - | |
131 | - @Override | |
132 | - public void setSearchText(String searchText) { | |
133 | - this.searchText = searchText; | |
134 | - } | |
135 | - | |
136 | - public String getSearchText() { | |
137 | - return searchText; | |
138 | - } | |
139 | - | |
140 | - @Override | |
141 | - public DashboardInfo toData() { | |
142 | - DashboardInfo dashboardInfo = new DashboardInfo(new DashboardId(id)); | |
143 | - dashboardInfo.setCreatedTime(UUIDs.unixTimestamp(id)); | |
144 | - if (tenantId != null) { | |
145 | - dashboardInfo.setTenantId(new TenantId(tenantId)); | |
146 | - } | |
147 | - dashboardInfo.setTitle(title); | |
148 | - if (!StringUtils.isEmpty(assignedCustomers)) { | |
149 | - try { | |
150 | - dashboardInfo.setAssignedCustomers(objectMapper.readValue(assignedCustomers, assignedCustomersType)); | |
151 | - } catch (IOException e) { | |
152 | - log.warn("Unable to parse assigned customers!", e); | |
153 | - } | |
154 | - } | |
155 | - return dashboardInfo; | |
156 | - } | |
157 | - | |
158 | -} | |
\ No newline at end of file |
dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceCredentialsEntity.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.Column; | |
20 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
21 | -import com.datastax.driver.mapping.annotations.Table; | |
22 | -import lombok.EqualsAndHashCode; | |
23 | -import lombok.ToString; | |
24 | -import org.thingsboard.server.common.data.id.DeviceCredentialsId; | |
25 | -import org.thingsboard.server.common.data.id.DeviceId; | |
26 | -import org.thingsboard.server.common.data.security.DeviceCredentials; | |
27 | -import org.thingsboard.server.common.data.security.DeviceCredentialsType; | |
28 | -import org.thingsboard.server.dao.model.BaseEntity; | |
29 | -import org.thingsboard.server.dao.model.type.DeviceCredentialsTypeCodec; | |
30 | - | |
31 | -import java.util.UUID; | |
32 | - | |
33 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CREDENTIALS_COLUMN_FAMILY_NAME; | |
34 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_ID_PROPERTY; | |
35 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_TYPE_PROPERTY; | |
36 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_VALUE_PROPERTY; | |
37 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CREDENTIALS_DEVICE_ID_PROPERTY; | |
38 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
39 | - | |
40 | -@Table(name = DEVICE_CREDENTIALS_COLUMN_FAMILY_NAME) | |
41 | -@EqualsAndHashCode | |
42 | -@ToString | |
43 | -public final class DeviceCredentialsEntity implements BaseEntity<DeviceCredentials> { | |
44 | - | |
45 | - @PartitionKey(value = 0) | |
46 | - @Column(name = ID_PROPERTY) | |
47 | - private UUID id; | |
48 | - | |
49 | - @Column(name = DEVICE_CREDENTIALS_DEVICE_ID_PROPERTY) | |
50 | - private UUID deviceId; | |
51 | - | |
52 | - @Column(name = DEVICE_CREDENTIALS_CREDENTIALS_TYPE_PROPERTY, codec = DeviceCredentialsTypeCodec.class) | |
53 | - private DeviceCredentialsType credentialsType; | |
54 | - | |
55 | - @Column(name = DEVICE_CREDENTIALS_CREDENTIALS_ID_PROPERTY) | |
56 | - private String credentialsId; | |
57 | - | |
58 | - @Column(name = DEVICE_CREDENTIALS_CREDENTIALS_VALUE_PROPERTY) | |
59 | - private String credentialsValue; | |
60 | - | |
61 | - public DeviceCredentialsEntity() { | |
62 | - super(); | |
63 | - } | |
64 | - | |
65 | - public DeviceCredentialsEntity(DeviceCredentials deviceCredentials) { | |
66 | - if (deviceCredentials.getId() != null) { | |
67 | - this.id = deviceCredentials.getId().getId(); | |
68 | - } | |
69 | - if (deviceCredentials.getDeviceId() != null) { | |
70 | - this.deviceId = deviceCredentials.getDeviceId().getId(); | |
71 | - } | |
72 | - this.credentialsType = deviceCredentials.getCredentialsType(); | |
73 | - this.credentialsId = deviceCredentials.getCredentialsId(); | |
74 | - this.credentialsValue = deviceCredentials.getCredentialsValue(); | |
75 | - } | |
76 | - | |
77 | - public UUID getId() { | |
78 | - return id; | |
79 | - } | |
80 | - | |
81 | - public void setId(UUID id) { | |
82 | - this.id = id; | |
83 | - } | |
84 | - | |
85 | - public UUID getDeviceId() { | |
86 | - return deviceId; | |
87 | - } | |
88 | - | |
89 | - public void setDeviceId(UUID deviceId) { | |
90 | - this.deviceId = deviceId; | |
91 | - } | |
92 | - | |
93 | - public DeviceCredentialsType getCredentialsType() { | |
94 | - return credentialsType; | |
95 | - } | |
96 | - | |
97 | - public void setCredentialsType(DeviceCredentialsType credentialsType) { | |
98 | - this.credentialsType = credentialsType; | |
99 | - } | |
100 | - | |
101 | - public String getCredentialsId() { | |
102 | - return credentialsId; | |
103 | - } | |
104 | - | |
105 | - public void setCredentialsId(String credentialsId) { | |
106 | - this.credentialsId = credentialsId; | |
107 | - } | |
108 | - | |
109 | - public String getCredentialsValue() { | |
110 | - return credentialsValue; | |
111 | - } | |
112 | - | |
113 | - public void setCredentialsValue(String credentialsValue) { | |
114 | - this.credentialsValue = credentialsValue; | |
115 | - } | |
116 | - | |
117 | - @Override | |
118 | - public DeviceCredentials toData() { | |
119 | - DeviceCredentials deviceCredentials = new DeviceCredentials(new DeviceCredentialsId(id)); | |
120 | - deviceCredentials.setCreatedTime(UUIDs.unixTimestamp(id)); | |
121 | - if (deviceId != null) { | |
122 | - deviceCredentials.setDeviceId(new DeviceId(deviceId)); | |
123 | - } | |
124 | - deviceCredentials.setCredentialsType(credentialsType); | |
125 | - deviceCredentials.setCredentialsId(credentialsId); | |
126 | - deviceCredentials.setCredentialsValue(credentialsValue); | |
127 | - return deviceCredentials; | |
128 | - } | |
129 | - | |
130 | -} | |
\ No newline at end of file |
dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceEntity.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.Column; | |
20 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
21 | -import com.datastax.driver.mapping.annotations.Table; | |
22 | -import com.fasterxml.jackson.databind.JsonNode; | |
23 | -import lombok.EqualsAndHashCode; | |
24 | -import lombok.ToString; | |
25 | -import org.thingsboard.server.common.data.Device; | |
26 | -import org.thingsboard.server.common.data.id.CustomerId; | |
27 | -import org.thingsboard.server.common.data.id.DeviceId; | |
28 | -import org.thingsboard.server.common.data.id.TenantId; | |
29 | -import org.thingsboard.server.dao.model.SearchTextEntity; | |
30 | -import org.thingsboard.server.dao.model.type.JsonCodec; | |
31 | - | |
32 | -import java.util.UUID; | |
33 | - | |
34 | -import static org.thingsboard.server.dao.model.ModelConstants.*; | |
35 | - | |
36 | -@Table(name = DEVICE_COLUMN_FAMILY_NAME) | |
37 | -@EqualsAndHashCode | |
38 | -@ToString | |
39 | -public final class DeviceEntity implements SearchTextEntity<Device> { | |
40 | - | |
41 | - @PartitionKey(value = 0) | |
42 | - @Column(name = ID_PROPERTY) | |
43 | - private UUID id; | |
44 | - | |
45 | - @PartitionKey(value = 1) | |
46 | - @Column(name = DEVICE_TENANT_ID_PROPERTY) | |
47 | - private UUID tenantId; | |
48 | - | |
49 | - @PartitionKey(value = 2) | |
50 | - @Column(name = DEVICE_CUSTOMER_ID_PROPERTY) | |
51 | - private UUID customerId; | |
52 | - | |
53 | - @PartitionKey(value = 3) | |
54 | - @Column(name = DEVICE_TYPE_PROPERTY) | |
55 | - private String type; | |
56 | - | |
57 | - @Column(name = DEVICE_NAME_PROPERTY) | |
58 | - private String name; | |
59 | - | |
60 | - @Column(name = DEVICE_LABEL_PROPERTY) | |
61 | - private String label; | |
62 | - | |
63 | - @Column(name = SEARCH_TEXT_PROPERTY) | |
64 | - private String searchText; | |
65 | - | |
66 | - @Column(name = DEVICE_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) | |
67 | - private JsonNode additionalInfo; | |
68 | - | |
69 | - public DeviceEntity() { | |
70 | - super(); | |
71 | - } | |
72 | - | |
73 | - public DeviceEntity(Device device) { | |
74 | - if (device.getId() != null) { | |
75 | - this.id = device.getId().getId(); | |
76 | - } | |
77 | - if (device.getTenantId() != null) { | |
78 | - this.tenantId = device.getTenantId().getId(); | |
79 | - } | |
80 | - if (device.getCustomerId() != null) { | |
81 | - this.customerId = device.getCustomerId().getId(); | |
82 | - } | |
83 | - this.name = device.getName(); | |
84 | - this.type = device.getType(); | |
85 | - this.label = device.getLabel(); | |
86 | - this.additionalInfo = device.getAdditionalInfo(); | |
87 | - } | |
88 | - | |
89 | - public UUID getId() { | |
90 | - return id; | |
91 | - } | |
92 | - | |
93 | - public void setId(UUID id) { | |
94 | - this.id = id; | |
95 | - } | |
96 | - | |
97 | - public UUID getTenantId() { | |
98 | - return tenantId; | |
99 | - } | |
100 | - | |
101 | - public void setTenantId(UUID tenantId) { | |
102 | - this.tenantId = tenantId; | |
103 | - } | |
104 | - | |
105 | - public UUID getCustomerId() { | |
106 | - return customerId; | |
107 | - } | |
108 | - | |
109 | - public void setCustomerId(UUID customerId) { | |
110 | - this.customerId = customerId; | |
111 | - } | |
112 | - | |
113 | - public String getName() { | |
114 | - return name; | |
115 | - } | |
116 | - | |
117 | - public void setName(String name) { | |
118 | - this.name = name; | |
119 | - } | |
120 | - | |
121 | - public String getType() { | |
122 | - return type; | |
123 | - } | |
124 | - | |
125 | - public void setType(String type) { | |
126 | - this.type = type; | |
127 | - } | |
128 | - | |
129 | - public JsonNode getAdditionalInfo() { | |
130 | - return additionalInfo; | |
131 | - } | |
132 | - | |
133 | - public void setAdditionalInfo(JsonNode additionalInfo) { | |
134 | - this.additionalInfo = additionalInfo; | |
135 | - } | |
136 | - | |
137 | - @Override | |
138 | - public String getSearchTextSource() { | |
139 | - return getName(); | |
140 | - } | |
141 | - | |
142 | - @Override | |
143 | - public void setSearchText(String searchText) { | |
144 | - this.searchText = searchText; | |
145 | - } | |
146 | - | |
147 | - public String getSearchText() { | |
148 | - return searchText; | |
149 | - } | |
150 | - | |
151 | - @Override | |
152 | - public Device toData() { | |
153 | - Device device = new Device(new DeviceId(id)); | |
154 | - device.setCreatedTime(UUIDs.unixTimestamp(id)); | |
155 | - if (tenantId != null) { | |
156 | - device.setTenantId(new TenantId(tenantId)); | |
157 | - } | |
158 | - if (customerId != null) { | |
159 | - device.setCustomerId(new CustomerId(customerId)); | |
160 | - } | |
161 | - device.setName(name); | |
162 | - device.setType(type); | |
163 | - device.setLabel(label); | |
164 | - device.setAdditionalInfo(additionalInfo); | |
165 | - return device; | |
166 | - } | |
167 | - | |
168 | -} | |
\ No newline at end of file |
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.Column; | |
20 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
21 | -import com.datastax.driver.mapping.annotations.Table; | |
22 | -import com.fasterxml.jackson.databind.JsonNode; | |
23 | -import com.fasterxml.jackson.databind.ObjectMapper; | |
24 | -import lombok.Data; | |
25 | -import lombok.EqualsAndHashCode; | |
26 | -import lombok.ToString; | |
27 | -import lombok.extern.slf4j.Slf4j; | |
28 | -import org.hibernate.annotations.Type; | |
29 | -import org.thingsboard.server.common.data.EntityType; | |
30 | -import org.thingsboard.server.common.data.EntityView; | |
31 | -import org.thingsboard.server.common.data.id.CustomerId; | |
32 | -import org.thingsboard.server.common.data.id.EntityIdFactory; | |
33 | -import org.thingsboard.server.common.data.id.EntityViewId; | |
34 | -import org.thingsboard.server.common.data.id.TenantId; | |
35 | -import org.thingsboard.server.common.data.objects.TelemetryEntityView; | |
36 | -import org.thingsboard.server.dao.model.ModelConstants; | |
37 | -import org.thingsboard.server.dao.model.SearchTextEntity; | |
38 | - | |
39 | -import javax.persistence.EnumType; | |
40 | -import javax.persistence.Enumerated; | |
41 | -import java.io.IOException; | |
42 | -import java.util.UUID; | |
43 | - | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_TYPE_PROPERTY; | |
45 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_PROPERTY; | |
46 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_TABLE_FAMILY_NAME; | |
47 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
48 | - | |
49 | -/** | |
50 | - * Created by Victor Basanets on 8/31/2017. | |
51 | - */ | |
52 | -@Data | |
53 | -@Table(name = ENTITY_VIEW_TABLE_FAMILY_NAME) | |
54 | -@EqualsAndHashCode | |
55 | -@ToString | |
56 | -@Slf4j | |
57 | -public class EntityViewEntity implements SearchTextEntity<EntityView> { | |
58 | - | |
59 | - @PartitionKey(value = 0) | |
60 | - @Column(name = ID_PROPERTY) | |
61 | - private UUID id; | |
62 | - | |
63 | - @PartitionKey(value = 1) | |
64 | - @Column(name = ModelConstants.ENTITY_VIEW_TENANT_ID_PROPERTY) | |
65 | - private UUID tenantId; | |
66 | - | |
67 | - @PartitionKey(value = 2) | |
68 | - @Column(name = ModelConstants.ENTITY_VIEW_CUSTOMER_ID_PROPERTY) | |
69 | - private UUID customerId; | |
70 | - | |
71 | - @PartitionKey(value = 3) | |
72 | - @Column(name = DEVICE_TYPE_PROPERTY) | |
73 | - private String type; | |
74 | - | |
75 | - @Enumerated(EnumType.STRING) | |
76 | - @Column(name = ENTITY_TYPE_PROPERTY) | |
77 | - private EntityType entityType; | |
78 | - | |
79 | - @Column(name = ModelConstants.ENTITY_VIEW_ENTITY_ID_PROPERTY) | |
80 | - private UUID entityId; | |
81 | - | |
82 | - @Column(name = ModelConstants.ENTITY_VIEW_NAME_PROPERTY) | |
83 | - private String name; | |
84 | - | |
85 | - @Column(name = ModelConstants.ENTITY_VIEW_KEYS_PROPERTY) | |
86 | - private String keys; | |
87 | - | |
88 | - @Column(name = ModelConstants.ENTITY_VIEW_START_TS_PROPERTY) | |
89 | - private long startTs; | |
90 | - | |
91 | - @Column(name = ModelConstants.ENTITY_VIEW_END_TS_PROPERTY) | |
92 | - private long endTs; | |
93 | - | |
94 | - @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) | |
95 | - private String searchText; | |
96 | - | |
97 | - @Type(type = "json") | |
98 | - @Column(name = ModelConstants.ENTITY_VIEW_ADDITIONAL_INFO_PROPERTY) | |
99 | - private JsonNode additionalInfo; | |
100 | - | |
101 | - private static final ObjectMapper mapper = new ObjectMapper(); | |
102 | - | |
103 | - public EntityViewEntity() { | |
104 | - super(); | |
105 | - } | |
106 | - | |
107 | - public EntityViewEntity(EntityView entityView) { | |
108 | - if (entityView.getId() != null) { | |
109 | - this.id = entityView.getId().getId(); | |
110 | - } | |
111 | - if (entityView.getEntityId() != null) { | |
112 | - this.entityId = entityView.getEntityId().getId(); | |
113 | - this.entityType = entityView.getEntityId().getEntityType(); | |
114 | - } | |
115 | - if (entityView.getTenantId() != null) { | |
116 | - this.tenantId = entityView.getTenantId().getId(); | |
117 | - } | |
118 | - if (entityView.getCustomerId() != null) { | |
119 | - this.customerId = entityView.getCustomerId().getId(); | |
120 | - } | |
121 | - this.type = entityView.getType(); | |
122 | - this.name = entityView.getName(); | |
123 | - try { | |
124 | - this.keys = mapper.writeValueAsString(entityView.getKeys()); | |
125 | - } catch (IOException e) { | |
126 | - log.error("Unable to serialize entity view keys!", e); | |
127 | - } | |
128 | - this.startTs = entityView.getStartTimeMs(); | |
129 | - this.endTs = entityView.getEndTimeMs(); | |
130 | - this.searchText = entityView.getSearchText(); | |
131 | - this.additionalInfo = entityView.getAdditionalInfo(); | |
132 | - } | |
133 | - | |
134 | - @Override | |
135 | - public String getSearchTextSource() { | |
136 | - return name; | |
137 | - } | |
138 | - | |
139 | - @Override | |
140 | - public EntityView toData() { | |
141 | - EntityView entityView = new EntityView(new EntityViewId(id)); | |
142 | - entityView.setCreatedTime(UUIDs.unixTimestamp(id)); | |
143 | - if (entityId != null) { | |
144 | - entityView.setEntityId(EntityIdFactory.getByTypeAndId(entityType.name(), entityId.toString())); | |
145 | - } | |
146 | - if (tenantId != null) { | |
147 | - entityView.setTenantId(new TenantId(tenantId)); | |
148 | - } | |
149 | - if (customerId != null) { | |
150 | - entityView.setCustomerId(new CustomerId(customerId)); | |
151 | - } | |
152 | - entityView.setType(type); | |
153 | - entityView.setName(name); | |
154 | - try { | |
155 | - entityView.setKeys(mapper.readValue(keys, TelemetryEntityView.class)); | |
156 | - } catch (IOException e) { | |
157 | - log.error("Unable to read entity view keys!", e); | |
158 | - } | |
159 | - entityView.setStartTimeMs(startTs); | |
160 | - entityView.setEndTimeMs(endTs); | |
161 | - entityView.setAdditionalInfo(additionalInfo); | |
162 | - return entityView; | |
163 | - } | |
164 | -} |
dao/src/main/java/org/thingsboard/server/dao/model/nosql/EventEntity.java
deleted
100644 → 0
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.ClusteringColumn; | |
20 | -import com.datastax.driver.mapping.annotations.Column; | |
21 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
22 | -import com.datastax.driver.mapping.annotations.Table; | |
23 | -import com.fasterxml.jackson.databind.JsonNode; | |
24 | -import lombok.Data; | |
25 | -import lombok.NoArgsConstructor; | |
26 | -import org.thingsboard.server.common.data.EntityType; | |
27 | -import org.thingsboard.server.common.data.Event; | |
28 | -import org.thingsboard.server.common.data.id.EntityIdFactory; | |
29 | -import org.thingsboard.server.common.data.id.EventId; | |
30 | -import org.thingsboard.server.common.data.id.TenantId; | |
31 | -import org.thingsboard.server.dao.model.BaseEntity; | |
32 | -import org.thingsboard.server.dao.model.type.EntityTypeCodec; | |
33 | -import org.thingsboard.server.dao.model.type.JsonCodec; | |
34 | - | |
35 | -import java.util.UUID; | |
36 | - | |
37 | -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_BODY_PROPERTY; | |
38 | -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_COLUMN_FAMILY_NAME; | |
39 | -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_ENTITY_ID_PROPERTY; | |
40 | -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_ENTITY_TYPE_PROPERTY; | |
41 | -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_TENANT_ID_PROPERTY; | |
42 | -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_TYPE_PROPERTY; | |
43 | -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_UID_PROPERTY; | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
45 | - | |
46 | -/** | |
47 | - * @author Andrew Shvayka | |
48 | - */ | |
49 | -@Data | |
50 | -@NoArgsConstructor | |
51 | -@Table(name = EVENT_COLUMN_FAMILY_NAME) | |
52 | -public class EventEntity implements BaseEntity<Event> { | |
53 | - | |
54 | - @Column(name = ID_PROPERTY) | |
55 | - private UUID id; | |
56 | - | |
57 | - @PartitionKey() | |
58 | - @Column(name = EVENT_TENANT_ID_PROPERTY) | |
59 | - private UUID tenantId; | |
60 | - | |
61 | - @PartitionKey(value = 1) | |
62 | - @Column(name = EVENT_ENTITY_TYPE_PROPERTY, codec = EntityTypeCodec.class) | |
63 | - private EntityType entityType; | |
64 | - | |
65 | - @PartitionKey(value = 2) | |
66 | - @Column(name = EVENT_ENTITY_ID_PROPERTY) | |
67 | - private UUID entityId; | |
68 | - | |
69 | - @ClusteringColumn() | |
70 | - @Column(name = EVENT_TYPE_PROPERTY) | |
71 | - private String eventType; | |
72 | - | |
73 | - @ClusteringColumn(value = 1) | |
74 | - @Column(name = EVENT_UID_PROPERTY) | |
75 | - private String eventUid; | |
76 | - | |
77 | - @Column(name = EVENT_BODY_PROPERTY, codec = JsonCodec.class) | |
78 | - private JsonNode body; | |
79 | - | |
80 | - public EventEntity(Event event) { | |
81 | - if (event.getId() != null) { | |
82 | - this.id = event.getId().getId(); | |
83 | - } | |
84 | - if (event.getTenantId() != null) { | |
85 | - this.tenantId = event.getTenantId().getId(); | |
86 | - } | |
87 | - if (event.getEntityId() != null) { | |
88 | - this.entityType = event.getEntityId().getEntityType(); | |
89 | - this.entityId = event.getEntityId().getId(); | |
90 | - } | |
91 | - this.eventType = event.getType(); | |
92 | - this.eventUid = event.getUid(); | |
93 | - this.body = event.getBody(); | |
94 | - } | |
95 | - | |
96 | - @Override | |
97 | - public UUID getId() { | |
98 | - return id; | |
99 | - } | |
100 | - | |
101 | - @Override | |
102 | - public void setId(UUID id) { | |
103 | - this.id = id; | |
104 | - } | |
105 | - | |
106 | - @Override | |
107 | - public Event toData() { | |
108 | - Event event = new Event(new EventId(id)); | |
109 | - event.setCreatedTime(UUIDs.unixTimestamp(id)); | |
110 | - event.setTenantId(new TenantId(tenantId)); | |
111 | - event.setEntityId(EntityIdFactory.getByTypeAndUuid(entityType, entityId)); | |
112 | - event.setBody(body); | |
113 | - event.setType(eventType); | |
114 | - event.setUid(eventUid); | |
115 | - return event; | |
116 | - } | |
117 | -} |
1 | -/** | |
2 | - * Copyright © 2016-2019 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -package org.thingsboard.server.dao.model.nosql; | |
17 | - | |
18 | -import com.datastax.driver.core.utils.UUIDs; | |
19 | -import com.datastax.driver.mapping.annotations.ClusteringColumn; | |
20 | -import com.datastax.driver.mapping.annotations.Column; | |
21 | -import com.datastax.driver.mapping.annotations.PartitionKey; | |
22 | -import com.datastax.driver.mapping.annotations.Table; | |
23 | -import com.fasterxml.jackson.databind.JsonNode; | |
24 | -import lombok.EqualsAndHashCode; | |
25 | -import lombok.Getter; | |
26 | -import lombok.Setter; | |
27 | -import lombok.ToString; | |
28 | -import org.thingsboard.server.common.data.id.RuleChainId; | |
29 | -import org.thingsboard.server.common.data.id.RuleNodeId; | |
30 | -import org.thingsboard.server.common.data.id.TenantId; | |
31 | -import org.thingsboard.server.common.data.rule.RuleChain; | |
32 | -import org.thingsboard.server.dao.DaoUtil; | |
33 | -import org.thingsboard.server.dao.model.SearchTextEntity; | |
34 | -import org.thingsboard.server.dao.model.type.JsonCodec; | |
35 | - | |
36 | -import java.util.UUID; | |
37 | - | |
38 | -import static org.thingsboard.server.dao.model.ModelConstants.ADDITIONAL_INFO_PROPERTY; | |
39 | -import static org.thingsboard.server.dao.model.ModelConstants.DEBUG_MODE; | |
40 | -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; | |
41 | -import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_COLUMN_FAMILY_NAME; | |
42 | -import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_CONFIGURATION_PROPERTY; | |
43 | -import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_FIRST_RULE_NODE_ID_PROPERTY; | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_NAME_PROPERTY; | |
45 | -import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_ROOT_PROPERTY; | |
46 | -import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_TENANT_ID_PROPERTY; | |
47 | -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; | |
48 | - | |
49 | -@Table(name = RULE_CHAIN_COLUMN_FAMILY_NAME) | |
50 | -@EqualsAndHashCode | |
51 | -@ToString | |
52 | -public class RuleChainEntity implements SearchTextEntity<RuleChain> { | |
53 | - | |
54 | - @PartitionKey | |
55 | - @Column(name = ID_PROPERTY) | |
56 | - private UUID id; | |
57 | - @ClusteringColumn | |
58 | - @Column(name = RULE_CHAIN_TENANT_ID_PROPERTY) | |
59 | - private UUID tenantId; | |
60 | - @Column(name = RULE_CHAIN_NAME_PROPERTY) | |
61 | - private String name; | |
62 | - @Column(name = SEARCH_TEXT_PROPERTY) | |
63 | - private String searchText; | |
64 | - @Column(name = RULE_CHAIN_FIRST_RULE_NODE_ID_PROPERTY) | |
65 | - private UUID firstRuleNodeId; | |
66 | - @Column(name = RULE_CHAIN_ROOT_PROPERTY) | |
67 | - private boolean root; | |
68 | - @Getter | |
69 | - @Setter | |
70 | - @Column(name = DEBUG_MODE) | |
71 | - private boolean debugMode; | |
72 | - @Column(name = RULE_CHAIN_CONFIGURATION_PROPERTY, codec = JsonCodec.class) | |
73 | - private JsonNode configuration; | |
74 | - @Column(name = ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) | |
75 | - private JsonNode additionalInfo; | |
76 | - | |
77 | - public RuleChainEntity() { | |
78 | - } | |
79 | - | |
80 | - public RuleChainEntity(RuleChain ruleChain) { | |
81 | - if (ruleChain.getId() != null) { | |
82 | - this.id = ruleChain.getUuidId(); | |
83 | - } | |
84 | - this.tenantId = DaoUtil.getId(ruleChain.getTenantId()); | |
85 | - this.name = ruleChain.getName(); | |
86 | - this.searchText = ruleChain.getName(); | |
87 | - this.firstRuleNodeId = DaoUtil.getId(ruleChain.getFirstRuleNodeId()); | |
88 | - this.root = ruleChain.isRoot(); | |
89 | - this.debugMode = ruleChain.isDebugMode(); | |
90 | - this.configuration = ruleChain.getConfiguration(); | |
91 | - this.additionalInfo = ruleChain.getAdditionalInfo(); | |
92 | - } | |
93 | - | |
94 | - @Override | |
95 | - public String getSearchTextSource() { | |
96 | - return getSearchText(); | |
97 | - } | |
98 | - | |
99 | - @Override | |
100 | - public void setSearchText(String searchText) { | |
101 | - this.searchText = searchText; | |
102 | - } | |
103 | - | |
104 | - @Override | |
105 | - public UUID getId() { | |
106 | - return id; | |
107 | - } | |
108 | - | |
109 | - @Override | |
110 | - public void setId(UUID id) { | |
111 | - this.id = id; | |
112 | - } | |
113 | - | |
114 | - public UUID getTenantId() { | |
115 | - return tenantId; | |
116 | - } | |
117 | - | |
118 | - public void setTenantId(UUID tenantId) { | |
119 | - this.tenantId = tenantId; | |
120 | - } | |
121 | - | |
122 | - public String getName() { | |
123 | - return name; | |
124 | - } | |
125 | - | |
126 | - public void setName(String name) { | |
127 | - this.name = name; | |
128 | - } | |
129 | - | |
130 | - public UUID getFirstRuleNodeId() { | |
131 | - return firstRuleNodeId; | |
132 | - } | |
133 | - | |
134 | - public void setFirstRuleNodeId(UUID firstRuleNodeId) { | |
135 | - this.firstRuleNodeId = firstRuleNodeId; | |
136 | - } | |
137 | - | |
138 | - public boolean isRoot() { | |
139 | - return root; | |
140 | - } | |
141 | - | |
142 | - public void setRoot(boolean root) { | |
143 | - this.root = root; | |
144 | - } | |
145 | - | |
146 | - public String getSearchText() { | |
147 | - return searchText; | |
148 | - } | |
149 | - | |
150 | - public JsonNode getConfiguration() { | |
151 | - return configuration; | |
152 | - } | |
153 | - | |
154 | - public void setConfiguration(JsonNode configuration) { | |
155 | - this.configuration = configuration; | |
156 | - } | |
157 | - | |
158 | - public JsonNode getAdditionalInfo() { | |
159 | - return additionalInfo; | |
160 | - } | |
161 | - | |
162 | - public void setAdditionalInfo(JsonNode additionalInfo) { | |
163 | - this.additionalInfo = additionalInfo; | |
164 | - } | |
165 | - | |
166 | - @Override | |
167 | - public RuleChain toData() { | |
168 | - RuleChain ruleChain = new RuleChain(new RuleChainId(id)); | |
169 | - ruleChain.setCreatedTime(UUIDs.unixTimestamp(id)); | |
170 | - ruleChain.setTenantId(new TenantId(tenantId)); | |
171 | - ruleChain.setName(name); | |
172 | - if (this.firstRuleNodeId != null) { | |
173 | - ruleChain.setFirstRuleNodeId(new RuleNodeId(this.firstRuleNodeId)); | |
174 | - } | |
175 | - ruleChain.setRoot(this.root); | |
176 | - ruleChain.setDebugMode(this.debugMode); | |
177 | - ruleChain.setConfiguration(this.configuration); | |
178 | - ruleChain.setAdditionalInfo(this.additionalInfo); | |
179 | - return ruleChain; | |
180 | - } | |
181 | - | |
182 | -} |