@cronapp/templates 2.9.6-SP.4 → 2.9.6-SP.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. package/$global/data-layer/ENTITIES.ftl +6 -1
  2. package/file/crud/angular_crud_view/__FileName__.view.html.ftl +1 -1
  3. package/package.json +1 -1
  4. package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-autenticacao/bower.json +2 -1
  5. package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-autenticacao/views/logged/user.view.html +1 -8
  6. package/project/W/cronapp-rad-project/Dockerfile +2 -2
  7. package/project/W/cronapp-rad-project/diagram/app.umlcd +150 -0
  8. package/project/W/cronapp-rad-project/diagram/app.umlcd.ftl +150 -0
  9. package/project/W/cronapp-rad-project/src/main/java/META-INF/persistence.xml.ftl +1 -0
  10. package/project/W/cronapp-rad-project/src/main/java/app/dao/InvalidatedTokenDAO.java +24 -0
  11. package/project/W/cronapp-rad-project/src/main/java/app/dao/__copydata.ftl +2 -0
  12. package/project/W/cronapp-rad-project/src/main/java/app/entity/InvalidatedToken.java +113 -0
  13. package/project/W/cronapp-rad-project/src/main/java/app/entity/__copydata.ftl +2 -0
  14. package/project/W/cronapp-rad-project/src/main/java/app/populate.json.ftl +1 -1
  15. package/project/W/cronapp-rad-project/src/main/java/i18n/Messages_en_US.properties +2 -1
  16. package/project/W/cronapp-rad-project/src/main/java/i18n/Messages_pt_BR.properties +1 -0
  17. package/project/W/cronapp-rad-project/src/main/resources/__copydata.ftl +1 -1
  18. package/project/W/cronapp-rad-project/src/main/resources/templates/__copydata.ftl +4 -0
  19. package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/views/logged/home.view.html.ftl +4 -5
  20. package/templates/low-code/data-layer/ENTITIES.ftl +9 -0
@@ -10,7 +10,9 @@ import ${import};
10
10
  <#if (clazz.multitenantClass)>
11
11
  import org.eclipse.persistence.annotations.*;
12
12
  </#if>
13
-
13
+ <#if clazz.hasNotEmpty()>
14
+ import javax.validation.constraints.NotEmpty;
15
+ </#if>
14
16
  /**
15
17
  * Classe que representa a tabela <#if tableName??>${tableName}<#else>${clazz.name?upper_case}</#if>
16
18
  * @generated
@@ -96,6 +98,9 @@ public class ${clazz.name} implements Serializable {
96
98
  @Column(name = "${field.dbFieldName}"<#if !field.primaryKey>, nullable = ${field.nullable?c}, unique = ${field.unique?c}</#if><#if field.length??>, length=${field.length?c}</#if><#if field.precision??>, precision=${field.precision?c}</#if><#if field.scale??>, scale=${field.scale?c}</#if>, insertable=${field.insertable?c}, updatable=${field.updatable?c})
97
99
  </#if>
98
100
  </#if>
101
+ <#if !field.isNotEmpty()>
102
+ @NotEmpty(message="Não permite vazio.")
103
+ </#if>
99
104
  <#if (field.ignore)>
100
105
  @JsonIgnore
101
106
  </#if>
@@ -302,7 +302,7 @@
302
302
 
303
303
  <datasource data-component="crn-datasource" name="${dataSourceCombo}" entity="${model.namespace}.${relationClassName}" keys="${keyField}" schema="${model.getDSSchema(field.fullType)}" lazy=true></datasource>
304
304
  <div data-component="crn-enterprise-dynamic-combobox" id="modal-combo${field.getName()}-${model.random}" class="component-holder ng-binding ng-scope">
305
- <div class="form-group">
305
+ <div class="form-group" id="combobox-modal-${field.getName()}${model.random}">
306
306
  <label for="combobox-modal-${field.getName()}${model.random}" class=""><#if field.label?has_content>${field.label}<#else>${field.name?capitalize}</#if></label>
307
307
  <cron-dynamic-select
308
308
  id="combobox-modal-${field.getName()}${model.random}"
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@cronapp/templates",
3
- "version": "2.9.6-SP.4",
3
+ "version": "2.9.6-SP.40",
4
4
  "cronapp-ide-minimum-version": "2.5.0"
5
5
  }
@@ -25,6 +25,7 @@
25
25
  "dependencies": {
26
26
  "cronapp-framework-mobile-js": "3ed025ee788da6337bac26ed7af6019d7d0a470b",
27
27
  "cronapp-common-js": "b62115b1a7f134ecde300d8ebd510ccd5b054e55",
28
- "cronapi-js": "1744f41b61238494e7a014da822c2f98318076fb"
28
+ "cronapi-js": "1744f41b61238494e7a014da822c2f98318076fb",
29
+ "cronapp-lib-js": "694018c4f5de9f0677a105e2821a97ebab4dfdff"
29
30
  }
30
31
  }
@@ -16,13 +16,6 @@
16
16
  <h1 class="title" align-title="text-align: center;" style="text-align: center;">
17
17
  {{"Home.view.Users" | translate}}</h1>
18
18
  <div side="right" class="buttons buttons-right header-item" data-component="crn-header-button">
19
- <button aria-labelledby="right_plus_sr" class="button button-clear"
20
- ng-if="!User.inserting && !User.editing"
21
- ng-click="User.startInserting()" data-component="crn-button"
22
- xattr-type="button-clear">
23
- <i class="icon ion-ios-plus-empty"></i>
24
- <span id="right_plus_sr" class="sr-only">{{'Accessibility.Button.Aria.Label.Add' | translate}}</span>
25
- </button>
26
19
  <button aria-labelledby="right_checkmark_sr" class="button button-clear"
27
20
  ng-if="User.inserting || User.editing"
28
21
  ng-click="User.post()" data-component="crn-button" xattr-type="button-clear">
@@ -63,7 +56,7 @@
63
56
  <div class="item item-input item-stacked-label general-dynamic-image component-holder" quality="60" data-component="crn-dynamic-image" id="crn-dynamic-image-218116" ng-model="User.active.picture">
64
57
  <label class="input-label">{{'Users.view.Picture' | translate}}</label>
65
58
  <div class="form-group">
66
- <div dynamic-image="" alt="Dynamic Image Aria Label Text" ng-model="vars.input4657" max-file-size="5MB" target-width="640" target-height="480" class="dynamic-image-container" ng-required="false" allow-edit="false">
59
+ <div dynamic-image="" alt="Dynamic Image Aria Label Text" ng-model="User.active.picture" max-file-size="5MB" target-width="640" target-height="480" class="dynamic-image-container" ng-required="false" allow-edit="false">
67
60
  {{"template.crud.clickToAddImage" | translate}}
68
61
  </div>
69
62
  </div>
@@ -1,7 +1,7 @@
1
1
  ## Consulte a documentação do Docker em https://docs.cronapp.io para informações sobre o conteúdo desse arquivo.
2
2
 
3
- FROM alpine:3.12.0 as maven_builder
4
- RUN apk add --no-cache --update-cache maven openjdk11 npm git bash
3
+ FROM ubuntu:18.04 AS maven_builder
4
+ RUN apt update && apt install -y maven openjdk-11-jdk npm git bash
5
5
  WORKDIR /app
6
6
  ADD pom.xml /app/pom.xml
7
7
  RUN git config --global url."https://".insteadOf git://
@@ -1099,6 +1099,156 @@
1099
1099
  "type": "uml.Class",
1100
1100
  "z": 13
1101
1101
  },
1102
+ {
1103
+ "angle": 0,
1104
+ "attributes": [
1105
+ "id:java.lang.String",
1106
+ "expirationDate:java.sql.Timestamp"
1107
+ ],
1108
+ "attrs": {
1109
+ ".uml-class-attrs-rect": {
1110
+ "fill": "#F0F0F0",
1111
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
1112
+ "height": 60,
1113
+ "stroke": "#C2C2C2",
1114
+ "transform": "translate(0,40)"
1115
+ },
1116
+ ".uml-class-attrs-text": {
1117
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
1118
+ "font-size": 11,
1119
+ "text": "* id\nexpirationDate\n"
1120
+ },
1121
+ ".uml-class-attrs-value": {
1122
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
1123
+ "font-size": 11,
1124
+ "ref-x": 121,
1125
+ "text": "Texto\nCarimbo de Data e Hora\n"
1126
+ },
1127
+ ".uml-class-methods-rect": {
1128
+ "fill": "#F0F0F0",
1129
+ "height": 20,
1130
+ "stroke": "#C2C2C2",
1131
+ "stroke-width": 1,
1132
+ "transform": "translate(0,100)"
1133
+ },
1134
+ ".uml-class-methods-text": {
1135
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
1136
+ "font-size": 11,
1137
+ "text": ""
1138
+ },
1139
+ ".uml-class-name-rect": {
1140
+ "fill": "#F0F0F0",
1141
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
1142
+ "height": 40,
1143
+ "stroke": "#C2C2C2",
1144
+ "transform": "translate(0,0)"
1145
+ },
1146
+ ".uml-class-name-text": {
1147
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
1148
+ "text": "InvalidatedToken"
1149
+ }
1150
+ },
1151
+ "audit": false,
1152
+ "fields": [
1153
+ {
1154
+ "name": "id",
1155
+ "type": "java.lang.String",
1156
+ "dbName": "id",
1157
+ "dbLength": "",
1158
+ "dbPrecision": "",
1159
+ "dbScale": "",
1160
+ "dbDefaultValue": "UUID.randomUUID().toString().toUpperCase()",
1161
+ "label": "{{\u0027Id\u0027 | translate}}",
1162
+ "mask": "",
1163
+ "isPrimaryKey": true,
1164
+ "isUniqueKey": false,
1165
+ "isNullable": false,
1166
+ "pkType": "UUID",
1167
+ "multitenantContext": "",
1168
+ "jsonIgnore": false,
1169
+ "isTransient": false,
1170
+ "isInsertable": true,
1171
+ "isUpdatable": true,
1172
+ "isEncryption": false,
1173
+ "passwordPolicy": "none",
1174
+ "referencedColumnName": "",
1175
+ "isSearchable": false,
1176
+ "sequence": "",
1177
+ "isCascade": false,
1178
+ "isVersion": false,
1179
+ "storageId": "",
1180
+ "storageKey": "",
1181
+ "storageType": "",
1182
+ "storageSecret": "",
1183
+ "foreignKeyName": "",
1184
+ "joins": "",
1185
+ "isIndex": false,
1186
+ "useOuterJoin": false,
1187
+ "regionAWS": ""
1188
+ },
1189
+ {
1190
+ "name": "expirationDate",
1191
+ "type": "java.sql.Timestamp",
1192
+ "dbName": "expiration_date",
1193
+ "dbLength": "",
1194
+ "dbPrecision": "",
1195
+ "dbScale": "",
1196
+ "dbDefaultValue": "",
1197
+ "label": "{{\u0027ExpirationDate\u0027 | translate}}",
1198
+ "mask": "",
1199
+ "isPrimaryKey": false,
1200
+ "isUniqueKey": false,
1201
+ "isNullable": true,
1202
+ "pkType": "",
1203
+ "multitenantContext": "",
1204
+ "jsonIgnore": false,
1205
+ "isTransient": false,
1206
+ "isInsertable": true,
1207
+ "isUpdatable": true,
1208
+ "isEncryption": false,
1209
+ "passwordPolicy": "none",
1210
+ "referencedColumnName": "",
1211
+ "isSearchable": false,
1212
+ "sequence": "",
1213
+ "isCascade": false,
1214
+ "isVersion": false,
1215
+ "storageId": "",
1216
+ "storageKey": "",
1217
+ "storageType": "",
1218
+ "storageSecret": "",
1219
+ "foreignKeyName": "",
1220
+ "joins": "",
1221
+ "isIndex": false,
1222
+ "useOuterJoin": false,
1223
+ "regionAWS": ""
1224
+ }
1225
+ ],
1226
+ "generateView": "Auto",
1227
+ "id": "79a9aae4-09b4-4f9a-8712-b78ad5a08e3e",
1228
+ "isRest": "true",
1229
+ "methods": [],
1230
+ "modelType": "Table",
1231
+ "name": "InvalidatedToken",
1232
+ "position": {
1233
+ "x": 1150,
1234
+ "y": 566
1235
+ },
1236
+ "queries": [],
1237
+ "realName": "",
1238
+ "restSecurity": null,
1239
+ "role": "Class",
1240
+ "runtimeClass": "cronos.widgets.joint.uml.Class",
1241
+ "size": {
1242
+ "height": 120,
1243
+ "width": 261
1244
+ },
1245
+ "swagger": false,
1246
+ "tableName": "INVALIDATED_TOKEN",
1247
+ "tableScheme": null,
1248
+ "type": "uml.Class",
1249
+ "usePhysicalNames": false,
1250
+ "z": 24
1251
+ },
1102
1252
  {
1103
1253
  "angle": 0,
1104
1254
  "attributes": [
@@ -723,6 +723,156 @@
723
723
  "type": "uml.Class",
724
724
  "z": 13
725
725
  },
726
+ {
727
+ "angle": 0,
728
+ "attributes": [
729
+ "id:java.lang.String",
730
+ "expirationDate:java.sql.Timestamp"
731
+ ],
732
+ "attrs": {
733
+ ".uml-class-attrs-rect": {
734
+ "fill": "#F0F0F0",
735
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
736
+ "height": 60,
737
+ "stroke": "#C2C2C2",
738
+ "transform": "translate(0,40)"
739
+ },
740
+ ".uml-class-attrs-text": {
741
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
742
+ "font-size": 11,
743
+ "text": "* id\nexpirationDate\n"
744
+ },
745
+ ".uml-class-attrs-value": {
746
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
747
+ "font-size": 11,
748
+ "ref-x": 121,
749
+ "text": "Texto\nCarimbo de Data e Hora\n"
750
+ },
751
+ ".uml-class-methods-rect": {
752
+ "fill": "#F0F0F0",
753
+ "height": 20,
754
+ "stroke": "#C2C2C2",
755
+ "stroke-width": 1,
756
+ "transform": "translate(0,100)"
757
+ },
758
+ ".uml-class-methods-text": {
759
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
760
+ "font-size": 11,
761
+ "text": ""
762
+ },
763
+ ".uml-class-name-rect": {
764
+ "fill": "#F0F0F0",
765
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
766
+ "height": 40,
767
+ "stroke": "#C2C2C2",
768
+ "transform": "translate(0,0)"
769
+ },
770
+ ".uml-class-name-text": {
771
+ "font-family": "\u0027Fira Sans\u0027, sans-serif",
772
+ "text": "InvalidatedToken"
773
+ }
774
+ },
775
+ "audit": false,
776
+ "fields": [
777
+ {
778
+ "name": "id",
779
+ "type": "java.lang.String",
780
+ "dbName": "id",
781
+ "dbLength": "",
782
+ "dbPrecision": "",
783
+ "dbScale": "",
784
+ "dbDefaultValue": "UUID.randomUUID().toString().toUpperCase()",
785
+ "label": "{{\u0027Id\u0027 | translate}}",
786
+ "mask": "",
787
+ "isPrimaryKey": true,
788
+ "isUniqueKey": false,
789
+ "isNullable": false,
790
+ "pkType": "UUID",
791
+ "multitenantContext": "",
792
+ "jsonIgnore": false,
793
+ "isTransient": false,
794
+ "isInsertable": true,
795
+ "isUpdatable": true,
796
+ "isEncryption": false,
797
+ "passwordPolicy": "none",
798
+ "referencedColumnName": "",
799
+ "isSearchable": false,
800
+ "sequence": "",
801
+ "isCascade": false,
802
+ "isVersion": false,
803
+ "storageId": "",
804
+ "storageKey": "",
805
+ "storageType": "",
806
+ "storageSecret": "",
807
+ "foreignKeyName": "",
808
+ "joins": "",
809
+ "isIndex": false,
810
+ "useOuterJoin": false,
811
+ "regionAWS": ""
812
+ },
813
+ {
814
+ "name": "expirationDate",
815
+ "type": "java.sql.Timestamp",
816
+ "dbName": "expiration_date",
817
+ "dbLength": "",
818
+ "dbPrecision": "",
819
+ "dbScale": "",
820
+ "dbDefaultValue": "",
821
+ "label": "{{\u0027ExpirationDate\u0027 | translate}}",
822
+ "mask": "",
823
+ "isPrimaryKey": false,
824
+ "isUniqueKey": false,
825
+ "isNullable": true,
826
+ "pkType": "",
827
+ "multitenantContext": "",
828
+ "jsonIgnore": false,
829
+ "isTransient": false,
830
+ "isInsertable": true,
831
+ "isUpdatable": true,
832
+ "isEncryption": false,
833
+ "passwordPolicy": "none",
834
+ "referencedColumnName": "",
835
+ "isSearchable": false,
836
+ "sequence": "",
837
+ "isCascade": false,
838
+ "isVersion": false,
839
+ "storageId": "",
840
+ "storageKey": "",
841
+ "storageType": "",
842
+ "storageSecret": "",
843
+ "foreignKeyName": "",
844
+ "joins": "",
845
+ "isIndex": false,
846
+ "useOuterJoin": false,
847
+ "regionAWS": ""
848
+ }
849
+ ],
850
+ "generateView": "Auto",
851
+ "id": "79a9aae4-09b4-4f9a-8712-b78ad5a08e3e",
852
+ "isRest": "true",
853
+ "methods": [],
854
+ "modelType": "Table",
855
+ "name": "InvalidatedToken",
856
+ "position": {
857
+ "x": 1150,
858
+ "y": 566
859
+ },
860
+ "queries": [],
861
+ "realName": "",
862
+ "restSecurity": null,
863
+ "role": "Class",
864
+ "runtimeClass": "cronos.widgets.joint.uml.Class",
865
+ "size": {
866
+ "height": 120,
867
+ "width": 261
868
+ },
869
+ "swagger": false,
870
+ "tableName": "INVALIDATED_TOKEN",
871
+ "tableScheme": null,
872
+ "type": "uml.Class",
873
+ "usePhysicalNames": false,
874
+ "z": 24
875
+ },
726
876
  {
727
877
  "angle": 0,
728
878
  "attributes": [
@@ -7,6 +7,7 @@
7
7
  <class>app.entity.Device</class>
8
8
  <#if (authentication??) >
9
9
  <#if ((authentication?lower_case) != "nenhuma") && !(service!"false")?boolean>
10
+ <class>app.entity.InvalidatedToken</class>
10
11
  <class>app.entity.RoleSecurable</class>
11
12
  <class>app.entity.Securable</class>
12
13
  <class>app.entity.UserSecurable</class>
@@ -0,0 +1,24 @@
1
+ package app.dao;
2
+
3
+ import app.entity.*;
4
+ import java.util.*;
5
+ import org.springframework.stereotype.*;
6
+ import org.springframework.data.jpa.repository.*;
7
+ import org.springframework.data.domain.*;
8
+ import org.springframework.data.repository.query.*;
9
+ import org.springframework.transaction.annotation.*;
10
+
11
+
12
+ /**
13
+ * Realiza operação de Create, Read, Update e Delete no banco de dados.
14
+ * Os métodos de create, edit, delete e outros estão abstraídos no JpaRepository
15
+ *
16
+ * @see org.springframework.data.jpa.repository.JpaRepository
17
+ *
18
+ * @generated
19
+ */
20
+ @Repository("app-InvalidatedTokenDAO")
21
+ @Transactional(transactionManager="app-TransactionManager")
22
+ public interface InvalidatedTokenDAO extends JpaRepository<InvalidatedToken, java.lang.String> {
23
+
24
+ }
@@ -8,6 +8,7 @@ file=ApplicationDAO.java
8
8
  file=ApplicationUserDAO.java
9
9
  file=AuditLogDAO.java
10
10
  file=DeviceDAO.java
11
+ file=InvalidatedTokenDAO.java
11
12
  file=LoginDAO.java
12
13
  file=RoleDAO.java
13
14
  file=RoleSecurableDAO.java
@@ -23,6 +24,7 @@ file=ApplicationDAO.java
23
24
  file=ApplicationUserDAO.java
24
25
  file=AuditLogDAO.java
25
26
  file=DeviceDAO.java
27
+ file=InvalidatedTokenDAO.java
26
28
  file=LoginDAO.java
27
29
  file=RoleDAO.java
28
30
  file=RoleSecurableDAO.java
@@ -0,0 +1,113 @@
1
+
2
+ package app.entity;
3
+
4
+ import java.io.*;
5
+ import javax.persistence.*;
6
+ import java.util.*;
7
+ import javax.xml.bind.annotation.*;
8
+ import com.fasterxml.jackson.annotation.JsonIgnore;
9
+ import com.fasterxml.jackson.annotation.JsonFilter;
10
+ import cronapi.rest.security.CronappSecurity;
11
+ import cronapi.swagger.CronappSwagger;
12
+
13
+
14
+ /**
15
+ * Classe que representa a tabela INVALIDATED_TOKEN
16
+ * @generated
17
+ */
18
+ @javax.persistence.Entity
19
+ @javax.persistence.Table(name = "\"INVALIDATED_TOKEN\"")
20
+ @XmlRootElement
21
+ @CronappSecurity
22
+ @JsonFilter("app.entity.InvalidatedToken")
23
+ public class InvalidatedToken implements Serializable {
24
+ /**
25
+ * UID da classe, necessário na serialização
26
+ * @generated
27
+ */
28
+ private static final long serialVersionUID = 1L;
29
+
30
+ /**
31
+ * @generated
32
+ */
33
+ @Id
34
+ @Column(name = "id", nullable = false, insertable=true, updatable=true)
35
+ private java.lang.String id = UUID.randomUUID().toString().toUpperCase();
36
+
37
+
38
+ /**
39
+ * @generated
40
+ */
41
+ @Temporal(TemporalType.TIMESTAMP)
42
+ @Column(name = "expiration_date", nullable = true, unique = false, insertable=true, updatable=true, columnDefinition = "TIMESTAMP")
43
+
44
+ private java.util.Date expirationDate;
45
+
46
+
47
+ /**
48
+ * Construtor
49
+ * @generated
50
+ */
51
+ public InvalidatedToken(){
52
+ }
53
+
54
+ /**
55
+ * Obtém id
56
+ * return id
57
+ * @generated
58
+ */
59
+ public java.lang.String getId() {
60
+ return this.id;
61
+ }
62
+
63
+ /**
64
+ * Define id
65
+ * @param id id
66
+ * @generated
67
+ */
68
+ public InvalidatedToken setId(java.lang.String id) {
69
+ this.id = id;
70
+ return this;
71
+ }
72
+ /**
73
+ * Obtém expirationDate
74
+ * return expirationDate
75
+ * @generated
76
+ */
77
+ public java.util.Date getExpirationDate() {
78
+ return this.expirationDate;
79
+ }
80
+
81
+ /**
82
+ * Define expirationDate
83
+ * @param expirationDate expirationDate
84
+ * @generated
85
+ */
86
+ public InvalidatedToken setExpirationDate(java.util.Date expirationDate) {
87
+ this.expirationDate = expirationDate;
88
+ return this;
89
+ }
90
+
91
+ /**
92
+ * @generated
93
+ */
94
+ @Override
95
+ public boolean equals(Object obj) {
96
+ if (this == obj) return true;
97
+ if (obj == null || getClass() != obj.getClass()) return false;
98
+ InvalidatedToken object = (InvalidatedToken)obj;
99
+ if (id != null ? !id.equals(object.id) : object.id != null) return false;
100
+ return true;
101
+ }
102
+
103
+ /**
104
+ * @generated
105
+ */
106
+ @Override
107
+ public int hashCode() {
108
+ int result = 1;
109
+ result = 31 * result + ((id == null) ? 0 : id.hashCode());
110
+ return result;
111
+ }
112
+
113
+ }
@@ -8,6 +8,7 @@ file=Application.java
8
8
  file=ApplicationUser.java
9
9
  file=AuditLog.java
10
10
  file=Device.java
11
+ file=InvalidatedToken.java
11
12
  file=Login.java
12
13
  file=Role.java
13
14
  file=RoleSecurable.java
@@ -23,6 +24,7 @@ file=Application.java
23
24
  file=ApplicationUser.java
24
25
  file=AuditLog.java
25
26
  file=Device.java
27
+ file=InvalidatedToken.java
26
28
  file=Login.java
27
29
  file=Role.java
28
30
  file=RoleSecurable.java
@@ -379,7 +379,7 @@
379
379
  "securable": {
380
380
  "id": "${publicSecurable}"
381
381
  },
382
- "pattern": "/views/**",
382
+ "pattern": "/views/login.view.html",
383
383
  "getMethodAllowed": true,
384
384
  "headMethodAllowed": true,
385
385
  "putMethodAllowed": true,
@@ -13,6 +13,7 @@ DeleteMethodAllowed=Delete method allowed
13
13
  Email=Email
14
14
  EmailConfirmed=Email confirmed
15
15
  Error=Error
16
+ ExpirationDate=Expiration Date
16
17
  GetMethodAllowed=Get method allowed
17
18
  HeadMethodAllowed=Head method allowed
18
19
  Host=Host
@@ -38,7 +39,7 @@ Picture=Picture
38
39
  Platform=Platform
39
40
  PlatformVersion=Platform version
40
41
  PostMethodAllowed=Post method allowed
41
- ProviderDisplayName= Provider display name
42
+ ProviderDisplayName=Provider display name
42
43
  ProviderKey=Provider Key
43
44
  PutMethodAllowed=Put method allowed
44
45
  ResetPasswordEmailBody=Your reset password link is
@@ -13,6 +13,7 @@ DeleteMethodAllowed=Método Delete aceito
13
13
  Email=Email
14
14
  EmailConfirmed=Email confirmado
15
15
  Error=Erro
16
+ ExpirationDate=Data de expiração
16
17
  GetMethodAllowed=Método Get aceito
17
18
  HeadMethodAllowed=Método Head aceito
18
19
  Host=Host
@@ -1,4 +1,4 @@
1
1
  <#if !(service!"false")?boolean >
2
- path.content=/templates
2
+ path=/templates
3
3
  </#if>
4
4
  file=application.properties.ftl
@@ -0,0 +1,4 @@
1
+ <#if !(service!"false")?boolean >
2
+ file=reset-password.ftlh
3
+ file=reset-password_pt_BR.ftlh
4
+ </#if>
@@ -1,5 +1,5 @@
1
- <div class="component-holder ng-binding ng-scope <#if !(menuPosition??) || menuPosition == "Horizontal">crn-navigator-horizontal<#else>crn-navigator-vertical</#if>" data-component="crn-navbar" id="main-nav-bar" tabindex="-1">
2
- <nav class="navbar navbar-default">
1
+ <div class="component-holder ng-binding ng-scope <#if !(menuPosition??) || menuPosition == "Horizontal">crn-navigator-horizontal<#else>crn-navigator-vertical</#if>" id="main-nav-bar" tabindex="-1">
2
+ <nav class="navbar navbar-default ng-scope" data-container="true" data-component="crn-navbar" id="crn-navbar-983334">
3
3
  <ul aria-label="{{'DirectAccess' | translate}}" class="main-access" tabindex="-1">
4
4
  <li><a crn-anchor="main-view" href="javascript:void(0);" class="main-nav-link" alt="{{'MainContent' | translate}}">{{'MainContent' | translate}}</a> </li>
5
5
  <li><a crn-anchor="main-nav-bar" href="javascript:void(0);" class="main-nav-link" alt="{{'MainMenu' | translate}}">{{'MainMenu' | translate}}</a> </li>
@@ -9,7 +9,7 @@
9
9
  <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar, #navbar2" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
10
10
  <a class="component-holder ng-binding ng-scope navbar-brand" data-component="crn-image" ng-click="cronapi.screen.changeView('#/home', [])"> <img alt="{{'Home.view.Home' | translate}}" src="node_modules/cronapp-framework-js/img/cronapp-logo-login.png" id="crn-navbar-logo" data-component="crn-image"> </a>
11
11
  </div>
12
- <div id="navbar" class="navbar-collapse collapse float-left-desktop">
12
+ <div id="navbar" class="navbar-collapse collapse float-left-desktop" >
13
13
  <ul class="nav navbar-nav" style="float:none">
14
14
  <#if (customMenu??) >
15
15
  <#list customMenu?keys as key>
@@ -26,9 +26,8 @@
26
26
  </#list>
27
27
  </#if>
28
28
  <li>
29
- <cron-dynamic-menu id="crn-dynamic-menu-home" class="component-holder" data-component="crn-dynamic-menu" options="{&quot;escope&quot;:&quot;WEB&quot;,&quot;subMenuOptions&quot;:[{&quot;id&quot;:&quot;1h85bvnhg7511&quot;,&quot;name&quot;:&quot;Home&quot;,&quot;title&quot;:&quot;{{'Home.view.Home' | translate}}&quot;,&quot;iconClass&quot;:&quot;fa fa-home&quot;,&quot;action&quot;:&quot;cronapi.screen.changeView('#/home', [])&quot;,&quot;level&quot;:1,&quot;textPosition&quot;:&quot;left&quot;,&quot;imagePosition&quot;:&quot;left&quot;,&quot;contentTheme&quot;:&quot;light&quot;,&quot;iconTheme&quot;:&quot;light&quot;,&quot;menuItems&quot;:[]},{&quot;id&quot;:&quot;1iynbo1wq8twj&quot;,&quot;name&quot;:&quot;Admin&quot;,&quot;title&quot;:&quot;{{'Home.view.Admin' | translate}}&quot;,&quot;iconClass&quot;:&quot;fa fa-user&quot;,&quot;security&quot;:&quot;visible : Administrators, enabled : Administrators&quot;,&quot;action&quot;:&quot;&quot;,&quot;level&quot;:1,&quot;textPosition&quot;:&quot;left&quot;,&quot;imagePosition&quot;:&quot;left&quot;,&quot;contentTheme&quot;:&quot;light&quot;,&quot;iconTheme&quot;:&quot;light&quot;,&quot;menuItems&quot;:[{&quot;id&quot;:&quot;t4fkwdjzlcmu&quot;,&quot;name&quot;:&quot;Users&quot;,&quot;title&quot;:&quot;{{'Home.view.Users' | translate}}&quot;,&quot;iconClass&quot;:&quot;fa fa-user&quot;,&quot;security&quot;:&quot;visible : Administrators, enabled : Administrators&quot;,&quot;action&quot;:&quot;cronapi.screen.changeView('#/home/admin/user', [])&quot;,&quot;level&quot;:2,&quot;textPosition&quot;:&quot;left&quot;,&quot;imagePosition&quot;:&quot;left&quot;,&quot;contentTheme&quot;:&quot;light&quot;,&quot;iconTheme&quot;:&quot;light&quot;,&quot;menuItems&quot;:[]},{&quot;id&quot;:&quot;s4xeikriw2et&quot;,&quot;name&quot;:&quot;AuditLog&quot;,&quot;title&quot;:&quot;{{'AuditLog' | translate}}&quot;,&quot;iconClass&quot;:&quot;fa fa-list-ol&quot;,&quot;security&quot;:&quot;visible : Administrators, enabled : Administrators&quot;,&quot;action&quot;:&quot;cronapi.screen.changeView('#/home/admin/auditlog.search', [])&quot;,&quot;level&quot;:2,&quot;textPosition&quot;:&quot;left&quot;,&quot;imagePosition&quot;:&quot;left&quot;,&quot;contentTheme&quot;:&quot;light&quot;,&quot;iconTheme&quot;:&quot;light&quot;,&quot;menuItems&quot;:[]},{&quot;id&quot;:&quot;1jeqhtersh46d&quot;,&quot;name&quot;:&quot;Roles&quot;,&quot;title&quot;:&quot;{{'Home.view.Roles' | translate}}&quot;,&quot;iconClass&quot;:&quot;fa fa-users&quot;,&quot;security&quot;:&quot;visible : Administrators, enabled : Administrators&quot;,&quot;action&quot;:&quot;cronapi.screen.changeView('#/home/admin/role', [])&quot;,&quot;level&quot;:2,&quot;textPosition&quot;:&quot;left&quot;,&quot;imagePosition&quot;:&quot;left&quot;,&quot;contentTheme&quot;:&quot;light&quot;,&quot;iconTheme&quot;:&quot;light&quot;,&quot;menuItems&quot;:[]}]}]}" class="">Dynamic Menu</cron-dynamic-menu>
29
+ <cron-dynamic-menu id="crn-dynamic-menu-home" class="component-holder" data-component="crn-dynamic-menu" options="{&quot;escope&quot;:&quot;WEB&quot;,&quot;subMenuOptions&quot;:[{&quot;id&quot;:&quot;1h85bvnhg7511&quot;,&quot;name&quot;:&quot;Home&quot;,&quot;title&quot;:&quot;{{'Home.view.Home' | translate}}&quot;,&quot;iconClass&quot;:&quot;fa fa-home&quot;,&quot;action&quot;:&quot;cronapi.screen.changeView('#/home', [])&quot;,&quot;level&quot;:1,&quot;textPosition&quot;:&quot;left&quot;,&quot;imagePosition&quot;:&quot;left&quot;,&quot;contentTheme&quot;:&quot;light&quot;,&quot;iconTheme&quot;:&quot;light&quot;,&quot;menuItems&quot;:[]},{&quot;id&quot;:&quot;1iynbo1wq8twj&quot;,&quot;name&quot;:&quot;Admin&quot;,&quot;title&quot;:&quot;{{'Home.view.Admin' | translate}}&quot;,&quot;iconClass&quot;:&quot;fa fa-user&quot;,&quot;security&quot;:&quot;visible : Administrators, enabled : Administrators&quot;,&quot;action&quot;:&quot;&quot;,&quot;level&quot;:1,&quot;textPosition&quot;:&quot;left&quot;,&quot;imagePosition&quot;:&quot;left&quot;,&quot;contentTheme&quot;:&quot;light&quot;,&quot;iconTheme&quot;:&quot;light&quot;,&quot;menuItems&quot;:[{&quot;id&quot;:&quot;t4fkwdjzlcmu&quot;,&quot;name&quot;:&quot;Users&quot;,&quot;title&quot;:&quot;{{'Home.view.Users' | translate}}&quot;,&quot;iconClass&quot;:&quot;fa fa-user&quot;,&quot;security&quot;:&quot;visible : Administrators, enabled : Administrators&quot;,&quot;action&quot;:&quot;cronapi.screen.changeView('#/home/admin/user', [])&quot;,&quot;level&quot;:2,&quot;textPosition&quot;:&quot;left&quot;,&quot;imagePosition&quot;:&quot;left&quot;,&quot;contentTheme&quot;:&quot;light&quot;,&quot;iconTheme&quot;:&quot;light&quot;,&quot;menuItems&quot;:[]},{&quot;id&quot;:&quot;s4xeikriw2et&quot;,&quot;name&quot;:&quot;AuditLog&quot;,&quot;title&quot;:&quot;{{'AuditLog' | translate}}&quot;,&quot;iconClass&quot;:&quot;fa fa-list-ol&quot;,&quot;security&quot;:&quot;visible : Administrators, enabled : Administrators&quot;,&quot;action&quot;:&quot;cronapi.screen.changeView('#/home/admin/auditlog.search', [])&quot;,&quot;level&quot;:2,&quot;textPosition&quot;:&quot;left&quot;,&quot;imagePosition&quot;:&quot;left&quot;,&quot;contentTheme&quot;:&quot;light&quot;,&quot;iconTheme&quot;:&quot;light&quot;,&quot;menuItems&quot;:[]},{&quot;id&quot;:&quot;1jeqhtersh46d&quot;,&quot;name&quot;:&quot;Roles&quot;,&quot;title&quot;:&quot;{{'Home.view.Roles' | translate}}&quot;,&quot;iconClass&quot;:&quot;fa fa-users&quot;,&quot;security&quot;:&quot;visible : Administrators, enabled : Administrators&quot;,&quot;action&quot;:&quot;cronapi.screen.changeView('#/home/admin/role', [])&quot;,&quot;level&quot;:2,&quot;textPosition&quot;:&quot;left&quot;,&quot;imagePosition&quot;:&quot;left&quot;,&quot;contentTheme&quot;:&quot;light&quot;,&quot;iconTheme&quot;:&quot;light&quot;,&quot;menuItems&quot;:[]}]}]}">Dynamic Menu</cron-dynamic-menu>
30
30
  </li>
31
-
32
31
  </ul>
33
32
  </div>
34
33
  <div id="navbar2" class="navbar-collapse collapse">
@@ -56,6 +56,9 @@ import org.eclipse.persistence.annotations.JoinFetchType;
56
56
  <#if clazz.hasXML()>
57
57
  import cronapi.database.ByteConverter;
58
58
  </#if>
59
+ <#if clazz.hasNotEmpty()>
60
+ import javax.validation.constraints.NotEmpty;
61
+ </#if>
59
62
  <#assign hasCloudStorage = clazz.hasCloudStorage()>
60
63
  <#if hasCloudStorage>
61
64
  import cronapi.CronapiCloud;
@@ -195,6 +198,9 @@ public class ${clazz.name} implements Serializable {
195
198
  </#if>
196
199
  <#if (field.isUUID())!false>
197
200
  @Convert("uuid")
201
+ </#if>
202
+ <#if field.isNotEmpty()>
203
+ @NotEmpty
198
204
  </#if>
199
205
  <#if field.isVersion()>
200
206
  @Version
@@ -242,6 +248,9 @@ public class ${clazz.name} implements Serializable {
242
248
  </#if>
243
249
  <#if (field.isUUID())!false>
244
250
  @Convert("uuid")
251
+ </#if>
252
+ <#if field.isNotEmpty()>
253
+ @NotEmpty
245
254
  </#if>
246
255
  <#if (field.XML)!false>
247
256
  @Convert("bytes")