Commit 889e55104af22adb60ffcda14accb386c6cff830
Merge branch 'master' of https://github.com/thingsboard/thingsboard into map/3.0
Showing
7 changed files
with
73 additions
and
69 deletions
@@ -135,7 +135,7 @@ public class CassandraEntitiesToSqlMigrateService implements EntitiesMigrateServ | @@ -135,7 +135,7 @@ public class CassandraEntitiesToSqlMigrateService implements EntitiesMigrateServ | ||
135 | stringColumn("entity_type"), | 135 | stringColumn("entity_type"), |
136 | stringColumn("attribute_type"), | 136 | stringColumn("attribute_type"), |
137 | stringColumn("attribute_key"), | 137 | stringColumn("attribute_key"), |
138 | - booleanColumn("bool_v"), | 138 | + booleanColumn("bool_v", true), |
139 | stringColumn("str_v"), | 139 | stringColumn("str_v"), |
140 | bigintColumn("long_v"), | 140 | bigintColumn("long_v"), |
141 | doubleColumn("dbl_v"), | 141 | doubleColumn("dbl_v"), |
@@ -38,6 +38,7 @@ public class CassandraToSqlColumn { | @@ -38,6 +38,7 @@ public class CassandraToSqlColumn { | ||
38 | private int sqlType; | 38 | private int sqlType; |
39 | private int size; | 39 | private int size; |
40 | private Class<? extends Enum> enumClass; | 40 | private Class<? extends Enum> enumClass; |
41 | + private boolean allowNullBoolean = false; | ||
41 | 42 | ||
42 | public static CassandraToSqlColumn idColumn(String name) { | 43 | public static CassandraToSqlColumn idColumn(String name) { |
43 | return new CassandraToSqlColumn(name, CassandraToSqlColumnType.ID); | 44 | return new CassandraToSqlColumn(name, CassandraToSqlColumnType.ID); |
@@ -60,7 +61,11 @@ public class CassandraToSqlColumn { | @@ -60,7 +61,11 @@ public class CassandraToSqlColumn { | ||
60 | } | 61 | } |
61 | 62 | ||
62 | public static CassandraToSqlColumn booleanColumn(String name) { | 63 | public static CassandraToSqlColumn booleanColumn(String name) { |
63 | - return new CassandraToSqlColumn(name, CassandraToSqlColumnType.BOOLEAN); | 64 | + return booleanColumn(name, false); |
65 | + } | ||
66 | + | ||
67 | + public static CassandraToSqlColumn booleanColumn(String name, boolean allowNullBoolean) { | ||
68 | + return new CassandraToSqlColumn(name, name, CassandraToSqlColumnType.BOOLEAN, null, allowNullBoolean); | ||
64 | } | 69 | } |
65 | 70 | ||
66 | public static CassandraToSqlColumn jsonColumn(String name) { | 71 | public static CassandraToSqlColumn jsonColumn(String name) { |
@@ -72,32 +77,33 @@ public class CassandraToSqlColumn { | @@ -72,32 +77,33 @@ public class CassandraToSqlColumn { | ||
72 | } | 77 | } |
73 | 78 | ||
74 | public CassandraToSqlColumn(String columnName) { | 79 | public CassandraToSqlColumn(String columnName) { |
75 | - this(columnName, columnName, CassandraToSqlColumnType.STRING, null); | 80 | + this(columnName, columnName, CassandraToSqlColumnType.STRING, null, false); |
76 | } | 81 | } |
77 | 82 | ||
78 | public CassandraToSqlColumn(String columnName, CassandraToSqlColumnType type) { | 83 | public CassandraToSqlColumn(String columnName, CassandraToSqlColumnType type) { |
79 | - this(columnName, columnName, type, null); | 84 | + this(columnName, columnName, type, null, false); |
80 | } | 85 | } |
81 | 86 | ||
82 | public CassandraToSqlColumn(String columnName, CassandraToSqlColumnType type, Class<? extends Enum> enumClass) { | 87 | public CassandraToSqlColumn(String columnName, CassandraToSqlColumnType type, Class<? extends Enum> enumClass) { |
83 | - this(columnName, columnName, type, enumClass); | 88 | + this(columnName, columnName, type, enumClass, false); |
84 | } | 89 | } |
85 | 90 | ||
86 | public CassandraToSqlColumn(String cassandraColumnName, String sqlColumnName) { | 91 | public CassandraToSqlColumn(String cassandraColumnName, String sqlColumnName) { |
87 | - this(cassandraColumnName, sqlColumnName, CassandraToSqlColumnType.STRING, null); | 92 | + this(cassandraColumnName, sqlColumnName, CassandraToSqlColumnType.STRING, null, false); |
88 | } | 93 | } |
89 | 94 | ||
90 | public CassandraToSqlColumn(String cassandraColumnName, String sqlColumnName, CassandraToSqlColumnType type, | 95 | public CassandraToSqlColumn(String cassandraColumnName, String sqlColumnName, CassandraToSqlColumnType type, |
91 | - Class<? extends Enum> enumClass) { | 96 | + Class<? extends Enum> enumClass, boolean allowNullBoolean) { |
92 | this.cassandraColumnName = cassandraColumnName; | 97 | this.cassandraColumnName = cassandraColumnName; |
93 | this.sqlColumnName = sqlColumnName; | 98 | this.sqlColumnName = sqlColumnName; |
94 | this.type = type; | 99 | this.type = type; |
95 | this.enumClass = enumClass; | 100 | this.enumClass = enumClass; |
101 | + this.allowNullBoolean = allowNullBoolean; | ||
96 | } | 102 | } |
97 | 103 | ||
98 | public String getColumnValue(Row row) { | 104 | public String getColumnValue(Row row) { |
99 | if (row.isNull(index)) { | 105 | if (row.isNull(index)) { |
100 | - if (this.type == CassandraToSqlColumnType.BOOLEAN) { | 106 | + if (this.type == CassandraToSqlColumnType.BOOLEAN && !this.allowNullBoolean) { |
101 | return Boolean.toString(false); | 107 | return Boolean.toString(false); |
102 | } else { | 108 | } else { |
103 | return null; | 109 | return null; |
@@ -24,7 +24,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.EPOCH_DIFF; | @@ -24,7 +24,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.EPOCH_DIFF; | ||
24 | public class CassandraToSqlEventTsColumn extends CassandraToSqlColumn { | 24 | public class CassandraToSqlEventTsColumn extends CassandraToSqlColumn { |
25 | 25 | ||
26 | CassandraToSqlEventTsColumn() { | 26 | CassandraToSqlEventTsColumn() { |
27 | - super("id", "ts", CassandraToSqlColumnType.BIGINT, null); | 27 | + super("id", "ts", CassandraToSqlColumnType.BIGINT, null, false); |
28 | } | 28 | } |
29 | 29 | ||
30 | @Override | 30 | @Override |
@@ -85,51 +85,53 @@ | @@ -85,51 +85,53 @@ | ||
85 | formControlName="entityId"> | 85 | formControlName="entityId"> |
86 | </tb-entity-select> | 86 | </tb-entity-select> |
87 | </section> | 87 | </section> |
88 | - <div formGroupName="keys"> | ||
89 | - <mat-expansion-panel formGroupName="attributes" [expanded]="true"> | ||
90 | - <mat-expansion-panel-header> | ||
91 | - <mat-panel-title> | ||
92 | - <div class="tb-panel-title" translate>entity-view.attributes-propagation</div> | ||
93 | - </mat-panel-title> | ||
94 | - </mat-expansion-panel-header> | ||
95 | - <div translate class="tb-hint">entity-view.attributes-propagation-hint</div> | ||
96 | - <label translate class="tb-title no-padding">entity-view.client-attributes</label> | ||
97 | - <tb-entity-keys-list | ||
98 | - [entityId]="selectedEntityId | async" | ||
99 | - formControlName="cs" | ||
100 | - keysText="entity-view.client-attributes-placeholder" | ||
101 | - [dataKeyType]="dataKeyType.attribute"> | ||
102 | - </tb-entity-keys-list> | ||
103 | - <label translate class="tb-title no-padding">entity-view.shared-attributes</label> | ||
104 | - <tb-entity-keys-list | ||
105 | - [entityId]="selectedEntityId | async" | ||
106 | - formControlName="sh" | ||
107 | - keysText="entity-view.shared-attributes-placeholder" | ||
108 | - [dataKeyType]="dataKeyType.attribute"> | ||
109 | - </tb-entity-keys-list> | ||
110 | - <label translate class="tb-title no-padding">entity-view.server-attributes</label> | ||
111 | - <tb-entity-keys-list | ||
112 | - [entityId]="selectedEntityId | async" | ||
113 | - formControlName="ss" | ||
114 | - keysText="entity-view.server-attributes-placeholder" | ||
115 | - [dataKeyType]="dataKeyType.attribute"> | ||
116 | - </tb-entity-keys-list> | ||
117 | - </mat-expansion-panel> | ||
118 | - <mat-expansion-panel [expanded]="true"> | ||
119 | - <mat-expansion-panel-header> | ||
120 | - <mat-panel-title> | ||
121 | - <div class="tb-panel-title" translate>entity-view.timeseries-data</div> | ||
122 | - </mat-panel-title> | ||
123 | - </mat-expansion-panel-header> | ||
124 | - <div translate class="tb-hint">entity-view.timeseries-data-hint</div> | ||
125 | - <label translate class="tb-title no-padding">entity-view.timeseries</label> | ||
126 | - <tb-entity-keys-list | ||
127 | - [entityId]="selectedEntityId | async" | ||
128 | - formControlName="timeseries" | ||
129 | - keysText="entity-view.timeseries-placeholder" | ||
130 | - [dataKeyType]="dataKeyType.timeseries"> | ||
131 | - </tb-entity-keys-list> | ||
132 | - </mat-expansion-panel> | 88 | + <div class="mat-accordion-container" formGroupName="keys"> |
89 | + <mat-accordion [multi]="true"> | ||
90 | + <mat-expansion-panel formGroupName="attributes" [expanded]="true"> | ||
91 | + <mat-expansion-panel-header> | ||
92 | + <mat-panel-title> | ||
93 | + <div class="tb-panel-title" translate>entity-view.attributes-propagation</div> | ||
94 | + </mat-panel-title> | ||
95 | + </mat-expansion-panel-header> | ||
96 | + <div translate class="tb-hint">entity-view.attributes-propagation-hint</div> | ||
97 | + <label translate class="tb-title no-padding">entity-view.client-attributes</label> | ||
98 | + <tb-entity-keys-list | ||
99 | + [entityId]="selectedEntityId | async" | ||
100 | + formControlName="cs" | ||
101 | + keysText="entity-view.client-attributes-placeholder" | ||
102 | + [dataKeyType]="dataKeyType.attribute"> | ||
103 | + </tb-entity-keys-list> | ||
104 | + <label translate class="tb-title no-padding">entity-view.shared-attributes</label> | ||
105 | + <tb-entity-keys-list | ||
106 | + [entityId]="selectedEntityId | async" | ||
107 | + formControlName="sh" | ||
108 | + keysText="entity-view.shared-attributes-placeholder" | ||
109 | + [dataKeyType]="dataKeyType.attribute"> | ||
110 | + </tb-entity-keys-list> | ||
111 | + <label translate class="tb-title no-padding">entity-view.server-attributes</label> | ||
112 | + <tb-entity-keys-list | ||
113 | + [entityId]="selectedEntityId | async" | ||
114 | + formControlName="ss" | ||
115 | + keysText="entity-view.server-attributes-placeholder" | ||
116 | + [dataKeyType]="dataKeyType.attribute"> | ||
117 | + </tb-entity-keys-list> | ||
118 | + </mat-expansion-panel> | ||
119 | + <mat-expansion-panel [expanded]="true"> | ||
120 | + <mat-expansion-panel-header> | ||
121 | + <mat-panel-title> | ||
122 | + <div class="tb-panel-title" translate>entity-view.timeseries-data</div> | ||
123 | + </mat-panel-title> | ||
124 | + </mat-expansion-panel-header> | ||
125 | + <div translate class="tb-hint">entity-view.timeseries-data-hint</div> | ||
126 | + <label translate class="tb-title no-padding">entity-view.timeseries</label> | ||
127 | + <tb-entity-keys-list | ||
128 | + [entityId]="selectedEntityId | async" | ||
129 | + formControlName="timeseries" | ||
130 | + keysText="entity-view.timeseries-placeholder" | ||
131 | + [dataKeyType]="dataKeyType.timeseries"> | ||
132 | + </tb-entity-keys-list> | ||
133 | + </mat-expansion-panel> | ||
134 | + </mat-accordion> | ||
133 | </div> | 135 | </div> |
134 | <tb-datetime | 136 | <tb-datetime |
135 | dateText="entity-view.start-date" | 137 | dateText="entity-view.start-date" |
@@ -14,16 +14,7 @@ | @@ -14,16 +14,7 @@ | ||
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | :host { | 16 | :host { |
17 | - mat-expansion-panel { | 17 | + .mat-accordion-container { |
18 | margin-bottom: 16px; | 18 | margin-bottom: 16px; |
19 | } | 19 | } |
20 | } | 20 | } |
21 | - | ||
22 | -.tb-dialog { | ||
23 | - :host { | ||
24 | - mat-expansion-panel { | ||
25 | - margin-left: 6px; | ||
26 | - margin-right: 6px; | ||
27 | - } | ||
28 | - } | ||
29 | -} |
@@ -14,9 +14,15 @@ | @@ -14,9 +14,15 @@ | ||
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | :host ::ng-deep { | 16 | :host ::ng-deep { |
17 | - .mat-checkbox.hinted-checkbox { | ||
18 | - .mat-checkbox-inner-container { | ||
19 | - margin-top: 4px; | 17 | + .mat-checkbox{ |
18 | + &.hinted-checkbox { | ||
19 | + .mat-checkbox-inner-container { | ||
20 | + margin-top: 4px; | ||
21 | + } | ||
22 | + } | ||
23 | + | ||
24 | + .mat-checkbox-layout{ | ||
25 | + white-space: normal; | ||
20 | } | 26 | } |
21 | } | 27 | } |
22 | } | 28 | } |
@@ -812,7 +812,6 @@ mat-label { | @@ -812,7 +812,6 @@ mat-label { | ||
812 | min-width: 100%; | 812 | min-width: 100%; |
813 | display: flex; | 813 | display: flex; |
814 | flex-direction: column; | 814 | flex-direction: column; |
815 | - overflow: auto; | ||
816 | } | 815 | } |
817 | .mat-dialog-content { | 816 | .mat-dialog-content { |
818 | margin: 0; | 817 | margin: 0; |
@@ -862,7 +861,7 @@ mat-label { | @@ -862,7 +861,7 @@ mat-label { | ||
862 | .mat-dialog-container { | 861 | .mat-dialog-container { |
863 | > *:first-child, form { | 862 | > *:first-child, form { |
864 | min-width: 100% !important; | 863 | min-width: 100% !important; |
865 | - height: 100vh; | 864 | + height: 100%; |
866 | } | 865 | } |
867 | .mat-dialog-content { | 866 | .mat-dialog-content { |
868 | max-height: 100%; | 867 | max-height: 100%; |